前言: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下载官网:点击打开
openssl下载页面:点击打开

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配置文件中httpstream是平级的,不要嵌套在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的用法的了解还只是冰山一角,本文介绍或许会有错误,欢迎留言指正,写本文也只是做做笔记。

参考链接:

标签: none

添加新评论