首页 文章

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

提问于
浏览
1

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

通过此设置, 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 回答

  • 1

    您的配置看起来很近 .

    • 代理 Headers 应该没问题 . 通常Nginx会传递头文件,因此当您想要修改它们时会使用proxy_set_header - 例如,即使客户端没有提供Host头,也会强制存在Host头 .

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

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

    您还没有在nginx配置中包含/ excluded路径 . 添加它

    location /excluded {
        return 403;
    }
    

相关问题