【问题标题】:NGINX Reverse Proxy Configuration StructureNGINX 反向代理配置结构
【发布时间】:2021-04-28 12:40:27
【问题描述】:

NGINX 反向代理的指令是否有“正确”的结构?在寻找 NGINX 反向代理的示例时,我发现了两个主要区别。

  1. http 指令用于容纳所有 server 指令。带有数据的服务器列在 upstream 指令内的池中。
  2. server 指令在main 指令中直接列出。

这有什么原因吗,还是这只是语法上的差异?

./nginx.conf 文件中#1 的示例:

upstream docker-registry {
  server registry:5000;
}

http {
  server {
    listen 80;
    listen [::]:80;

    return 301 https://$host#request_uri;
  }

  server {
    listen 443 default_server;
    ssl on;
    ssl_certificate external/cert.pem;
    ssl_certificate_key external/key.pem;
    
    # set HSTS-Header because we only allow https traffic
    add_header Strict-Transport-Security "max-age=31536000;";

    proxy_set_header Host       $http_host;   # required for Docker client sake
    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
      auth_basic "Restricted"
      auth_basic_user_file    external/docker-registry.htpasswd;
      
      proxy_pass http://docker-registry; # the docker container is the domain name
    }
    
    location /v1/_ping {
      auth_basic off;
      proxy_pass http://docker-registry; 
    }
  }
}

./nginx.conf 文件中#2 的示例:

server {
  listen 80;
  listen [::]:80;
  
  return 301 https://$host#request_uri;
}

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  
  error_log  /var/log/nginx/error.log  info;
  access_log /var/log/nginx/access.log main;

  ssl_certificate     /etc/ssl/private/{SSL_CERT_FILENAME};
  ssl_certificate_key /etc/ssl/private/{SSL_CERT_KEY_FILENAME};

  location / {
    proxy_pass http://app1
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr; # could also be `$proxy_add_x_forwarded_for`
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Request-Start $msec;
  }
}

【问题讨论】:

    标签: docker nginx ssl nginx-reverse-proxy nginx-config


    【解决方案1】:

    我不太明白你的问题,但在我看来,第二个例子缺少 http {},我不认为没有它 nginx 会启动。 除非您的 example2 文件以某种方式包含在具有 http{}

    的 nginx.conf 中

    【讨论】:

    • 没错,我在各种以教程为重点的文章和各种 GitHub 存储库中都看到了这两种风格。包含http 指令或缺少用于反向代理的指令对我来说很奇怪。 NGINX 将从任一结构开始。这可能是因为nginx.conf 规则被附加到/etc/nginx/conf.d/ 或类似的默认规则中吗?
    • 确实如此。 nginx 不允许在 http{} 之外使用此类指令。当然与代理、反向代理或任何其他类似的东西无关。 server 指令只允许在 http
    • 太好了,感谢您的澄清!我希望我能看到文档中发生这种情况的位置/原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2014-05-01
    • 2017-12-01
    • 2023-04-03
    • 2015-02-12
    相关资源
    最近更新 更多