编译安装nginx及简单使用
前言:nginx
是一个高性能的HTTP和反向代理服务器,支持热部署
,高并发
,同时消耗内存很低,处理响应快,具有很高的可靠性,是由俄罗斯人开发出的软件。
本文主要介绍在Debian10
发行版下使用nginx源码
和openssl源码
编译安装nginx二进制,简单介绍其使用,特别开启了--with-stream
模块,用于支持tcp和udp转发
。
1、安装一些必要软件
以root
用户执行下面命令:
# 升级源并安装一些必要软件
apt update && apt -y install build-essential vim libpcre3 libpcre3-dev zlib1g-dev
说明:gzip
模块需要zlib库
;rewrite
模块需要pcre库
;openssl
库提供ssl
功能相关支持,本文我们选择使用其官网最新源码,这里没有采用简单安装的方式。
2、下载源码
以root
用户执行下面命令下载源码:
# 切换路径
cd /usr/local/src
# 下载nginx源代码(稳定版)
wget https://nginx.org/download/nginx-1.20.2.tar.gz
# 解压
tar -zxf nginx-1.20.2.tar.gz
# 下载openssl源码
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1n.tar.gz
# 解压
tar -zxf openssl-1.1.1n.tar.gz
3、编译
对于nginx,编译不需要root
权限,但安装可能要用到root
:
# 切换路径
cd /usr/local/src/nginx-1.20.2
# 将nginx提供的vim解析nginx.conf配置添加到当前用户,提升vim解析能力
cp -r ./contrib/vim ~/.vim
后面就是执行configure
命令,其结果是在同目录下创建一个Makefile
文件和objs
目录,如果你想清除此次configure
命令,执行make clean
即可:
# 可以在同目录下创建一个configure.sh文件
vim configure.sh
# 下面是文件内容示例(关于此配置,我也是初学,不是很明白)
#!/bin/bash
./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/local/bin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_sub_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-openssl=../openssl-1.1.1n
# 保存为文件方便执行,也方便日后修改再执行
说明:上面configure
命令定义nginx的主配置路径前缀为/etc/nginx
,nginx二进制路径为/usr/local/bin/nginx
,主配置文件为/etc/nginx/nginx.conf
,其logs文件和pid就追随为/etc/nginx/logs
目录下,模块也是。对于nginx,--with-xxx_module
模块是默认不安装,需要执行configure
时手动添加上才能启用。--without-xxx_module
则相反,默认启用,执行configure
时加上才禁用集成。
创建上述configure.sh
文件后,赋予其可执行权限即可,而后即可开始编译:
# 赋予可执行权限
chmod +x configure.sh
# 执行
./configure.sh
# 编译
make
# 安装
sudo make install
4、nginx常用命令
# 查看nginx版本号及编译参数
nginx -V
#下面是输出结果
nginx version: nginx/1.20.2
built by gcc 8.3.0 (Debian 8.3.0-6)
built with OpenSSL 1.1.1n 15 Mar 2022
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/local/bin/nginx --conf-path=/etc/nginx/nginx.conf --with-http_ssl_module --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-openssl=../openssl-1.1.1n
# 重载配置
nginx -s reload
# 强制停止
nginx -s stop
5、配置nginx的service服务
下面让nginx可以通过systemd管理启动:
# 递归修改/etc/nginx的所有者和所属组
chown -R nobody:nogroup /etc/nginx
# 切换路径
cd /etc/systemd/system
# 配置nginx.service文件,下面是示例
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
User=nobody
Group=nogroup
AmbientCapabilities=CAP_NET_BIND_SERVICE
PIDFile=/etc/nginx/logs/nginx.pid
ExecStartPre=/usr/local/bin/nginx -t
ExecStart=/usr/local/bin/nginx
ExecReload=/usr/local/bin/nginx -s reload
ExecStop=/usr/local/bin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
添加服务文件后,执行systemctl daemon-reload
,然后启动systemctl start nginx
,加入开机自启systemctl enable nginx
。
6、简单使用nginx转发tcp和udp流量
由于上面configure
时启用了stream
,因此nginx的二进制就支持了跟stream模块
相关的功能,需要注意的是在nginx.conf
配置文件中http
和stream
是平级的,不要嵌套在http
下面:
# 修改/etc/nginx/nginx.conf配置文件
#user nobody
user nobody nogroup;
worker_processes 1;
events {
worker_connections 1024;
}
http {
...
}
stream {
#假定你在本机9000端口部署了个ss,且开启了tcp_and_udp模式
upstream ss {
server 127.0.0.1:9000;
}
server {
listen 1234;
proxy_connect_timeout 5s;
proxy_timeout 10s;
proxy_pass ss;
}
server {
listen 1234 udp;
proxy_timeout 10s;
proxy_pass ss;
}
}
修改完nginx.conf
配置文件后,即可重启nginx,测试nginx是否能监听本机1234的tcp和udp端口,并将其转发到后端的ss。
7、结语
对于nginx
的用法的了解还只是冰山一角,本文介绍或许会有错误,欢迎留言指正,写本文也只是做做笔记。
参考链接: