使用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_redirect off;
吗?答案 0 :(得分:1)
您的配置近似。
代理标头应该没问题。通常,Nginx会传递头文件,因此当你想修改它们时会使用proxy_set_header - 例如,即使客户端没有提供主头文件,也会强制它出现。
对于proxy_pass和上游,是的,名称需要匹配。
考虑将proxy_redirect置于(默认)状态。此选项会修改Nginx是否会干扰301和&amp; 302重定向,包括端口号。关闭它意味着您的upsteam应用程序必须负责在任何重定向响应中传递正确的公共域名和端口。将其设置为默认值意味着如果您不小心尝试将客户端指向端口8080,Nginx在某些情况下会将其更正为80端口。
您还没有在nginx配置中包含/ excluded路径。将其添加到
中location /excluded {
return 403;
}