【问题标题】:Simple reverse proxy with Nginx (equivalent to Apache)使用 Nginx 的简单反向代理(相当于 Apache)
【发布时间】:2016-01-24 08:22:44
【问题描述】:

使用 Apache,我可以使用此 VirtualHost 配置进行反向代理。 我已经执行nanoc view -p 8080为 nanoc Web 应用程序使用 8080 端口。

通过此设置,http://scalatra.prosseek 被映射到 nanoc。

<VirtualHost *:80>
    ProxyPreserveHost On
    ServerName scalatra.prosseek
    ProxyPass  /excluded !
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

我需要与 Nginx 进行相同的设置,通过一些试验和错误,我可以使其与此配置一起使用。

upstream aha { # ??? (1)
        server 127.0.0.1:8080;
        keepalive 8;
}

# the nginx server instance
server {
        listen 0.0.0.0:80;
        server_name scalatra.prosseek;
        access_log /usr/local/etc/nginx/logs/error_prosseek.log;

        location / {
            # ??? (2) 
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;

            proxy_pass http://aha/; # ??? (1)
            proxy_redirect off; # ??? (3)
        }
}

它有效,但我不确定这是否是最佳设置。 我的问题来了:

  • http://scalatra.prosseek 到 localhost:8080 的设置是否正常:
    • proxy_set_headers 的这些设置是否正确?还是我错过了什么?
    • proxy_pass和upstream,两个名字一样就可以了吗?
    • 我需要proxy_redirect off;吗?

【问题讨论】:

    标签: apache nginx proxy


    【解决方案1】:

    您的配置看起来很接近。

    • 代理头应该没问题。通常 Nginx 会通过标头,因此当您想要修改这些标头时使用 proxy_set_header - 例如,即使客户端没有提供 Host 标头,也要强制其存在。

    • 对于 proxy_pass 和 upstream,是的,名称需要匹配。

    • 考虑让 proxy_redirect 保持开启(默认)。此选项修改 Nginx 是否干扰响应,例如 301 和 302 重定向,包括端口号。关闭它意味着您的上游应用程序必须负责在任何重定向响应中传递正确的公共域名和端口。将其设置为默认值意味着如果您不小心尝试将客户端定向到端口 8080,Nginx 在某些情况下会将其更正为端口 80。

    您也没有在您的 nginx 配置中包含 /excluded 路径。将其添加到

    location /excluded {
        return 403;
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-14
      • 2021-05-21
      • 2021-07-06
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      相关资源
      最近更新 更多