标签 Nginx 下的文章

通过 ngx_stream_ssl_preread_module 模块(1.11.5) 实现HTTPS和SSH共用一个端口

根据 $ssl_preread_protocol 变量 判断SSL协议版本,选择上游。使ssh连接到ssh端口,HTTPS连接到https端口

nginx版本必须大于1.15.2,因为 nginx 1.15.2 版本之后新增了一个属性$ssl_preread_protocol,可以让stream区分web ssl/tls和其他协议

流程

1.ssh端口

2.https端口

3.通过stream模块实现四层协议的转发,根据 $ssl_preread_protocol 判断进入ssh还是https端口

- 阅读剩余部分 -

sub_filter 属于 ngx_http_sub_module 模块,不是默认构建的,需要通过 --with-http_sub_module 配置参数启用。

配置示例

        proxy_set_header Accept-Encoding ''; # 清除请求头中的Accept-Encoding,让后端服务器返回未压缩格式
        sub_filter_types *;                  # 替换所有类型
        sub_filter_once off;                 # 查找所有内容替换,而不是只替换一次
        sub_filter 'old_address:8080' 'new_address:8888'; # 示例,将响应中的内容 old_address:8080 替换成 new_address:8888

- 阅读剩余部分 -

官方文档

WebSocket代理

添加配置

                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";

示例

upstream ws-prod {
        server 192.168.1.1:9090;
}
server {
        listen 8081;
        charset utf-8;

        location / {
                # 向后端服务器传递自定义的请求头信息
                # proxy_set_header Host $host;
                proxy_set_header Host '192.168.1.1:9090';
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                proxy_pass http://ws-prod;

                # WebSocket 配置
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";

        }
        # 日志配置
        access_log /var/log/nginx/ws-prod_access.log main;
        error_log /var/log/nginx/ws-prod_error.log;
}

示例配置:

static.conf

server {
        listen 80;
        server_name www.example.com;
        charset utf-8;

        location / {
           root /home/www;          # 指定根目录
           index NON_EXISTENT_FILE; # 指定index是一个不存在的文件,这样就可以通过ngx_http_autoindex_module模块处理
           autoindex on;            # 启用目录列表输出
        }
        access_log /var/log/nginx/static_access.log main;
        error_log /var/log/nginx/static_error.log;
}

公开静态站点,站点根目录就是 /home/www 中的文件

- 阅读剩余部分 -