【Nginx】 配置学习笔记

虽然之前搭建自己的服务时,有配置过 Nginx,但没有很深入去了解。
这次因为工作需要,要整理下 Nginx 的配置。就仔细去看了下相关介绍。
这回算是补上知识的盲区了。


关于 server_name

当各个 server 的 listen 端口各不一样时,可以不用写 server_name。
但当多个 server 共用一个 listen 端口时,server_name 就需要写了。

关于 head

Nginx 在做转发时,会丢弃部分 head,所以在处理部分业务的时候,需要补上。

如果是一个 Web API 应用,那么下面几个需要补上

proxy_set_header Host $host; # 如果需要用域名在一些处理时,会有帮助
proxy_set_header X-Real-IP $remote_addr; #不补的话,后端服务看到的是nginx 的 ip,比如127.0.0.1
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #看到的是完整的 ip 链路
proxy_set_header X-Forwarded-Proto $scheme; # 用的是 http 还是 https 还是其他

具体讲下两个和 ip 相关的:
$remote_addr 获得的是访问 Nginx 的 IP,也就是“直连”IP(可能是代理)
$proxy_add_x_forwarded_for 比如 我(比如1.1.1.1) 通过某个代理访问(比如2.2.2.2) Nginx,那么这里获得的 IP 就是 1.1.1.1, 2.2.2.2

当需要使用 WebSocket 的时候,需要添加以下配置

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

只有 http1.1 才支持 WebSocket,另外两个 head 也是配置 ws 需要的。
不写proxy_http_version时,默认是1.0。写 1.1 不会有问题,性能更好。

关于速度

配置http2,可以让客户端访问 Nginx 更好更快。如果客户端不支持http2,会自动降级,不用操心。(配置位置见下面的代码)
配置 proxy_http_version 可以让 Nginx 访问后端服务更好更快。

如果想看这些$参数的值,可以放到 head 里,比如

# debug.conf
server {
    listen 8080 ssl; # 1.25以下,要开启 http2 的话:listen 8080 ssl http2
    http2 on; # nginx 1.25以上配置在这里
    location /debug { # 注意,下面这些X-Debug-*都是自定义的,不写 X-Debug 也OK
      add_header X-Debug-Upgrade       $http_upgrade;
      add_header X-Debug-Connection    $http_connection;
      add_header X-Debug-Real-IP       $remote_addr;
      add_header X-Debug-Host          $host;
      add_header X-Debug-Proto         $scheme;
      add_header X-Debug-request_uri   $request_uri;
      add_header X-Debug-Forwarded-For $proxy_add_x_forwarded_for;
      return 200 "OK\n";
    }
}

然后可以通过 curl -v http://...../debug 来查看上面添加的 header,也可以通过其他工具如 chrome。

配置里参数位置的介绍

  • server 里 location 之外的配置 —— 作用于“客户端到 Nginx”这段(协议、监听、SSL、路由)
  • location 里的配置 —— 作用于“Nginx 到后端”这段(代理、header、upgrade、timeout)

一个 Web API 的基础代理配置

server {
    listen 8080;
    http2 on;
    location / {
        proxy_pass http://192.168.101.1:18080;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_connect_timeout 5s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;
    }
}

一个 WebSocket 游戏服的基础代理配置

server {
    listen 8081;
    http2 on;
    location / {
        proxy_pass http://192.168.1.1:18081;

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

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_read_timeout 120s;
        proxy_send_timeout 120s;
        proxy_connect_timeout 4s;
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容