使用Nginx的简单反向代理(相当于Apache)

时间:2015-10-25 01:54:36

标签: apache nginx proxy

使用Apache,我可以使用此VirtualHost配置进行反向代理。 我已经执行nanoc view -p 8080使用8080端口用于nanoc web app。

通过此设置,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和上游,只要两个名称相同就可以了吗?
    • 我需要proxy_redirect off;吗?

1 个答案:

答案 0 :(得分:1)

您的配置近似。

  • 代理标头应该没问题。通常,Nginx会传递头文件,因此当你想修改它们时会使用proxy_set_header - 例如,即使客户端没有提供主头文件,也会强制它出现。

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

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

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

location /excluded {
    return 403;
}