编译安装nginx及简单使用 作者: 毕世平 时间: 2022-04-05 分类: 默认分类 前言:`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 > nginx下载官网:[点击打开](https://nginx.org/en/download.html "点击打开") openssl下载页面:[点击打开](https://www.openssl.org/source/ "点击打开") ## 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`的用法的了解还只是冰山一角,本文介绍或许会有错误,欢迎留言指正,写本文也只是做做笔记。 参考链接: - [nginx官网](https://nginx.org/ "nginx官网") - [openssl官网](https://www.openssl.org/ "openssl官网") - [Debian 9/10 编译安装nginx](https://www.iamhippo.com/2019-12/1196.html "Debian 9/10 编译安装nginx") - [systemctl 设置自定义服务管理(以nginx为例)](https://segmentfault.com/a/1190000009723940 "systemctl 设置自定义服务管理(以nginx为例)") - [Nginx 的好处](https://www.jianshu.com/p/815f654817c1 "Nginx 的好处") - [使用Nginx进行TCP/UDP端口转发](https://wzhz.xyz/books/linux/page/%E4%BD%BF%E7%94%A8nginx%E8%BF%9B%E8%A1%8Ctcpudp%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91 "使用Nginx进行TCP/UDP端口转发") - [nginx依赖模块pcre、zlib、openssl 安装](https://blog.csdn.net/huaishuming/article/details/54345826 "nginx依赖模块pcre、zlib、openssl 安装") 标签: none