簡體   English   中英

Nginx的簡單反向代理(等同於Apache)

[英]Simple reverse proxy with Nginx (equivalent to Apache)

使用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;

您的配置看起來很接近。

  • 代理頭應該沒問題。 通常,Nginx會傳遞標頭,因此當您要修改標頭時,將使用proxy_set_header -例如,即使客戶端不提供,也強制顯示Host標頭。

  • 對於proxy_pass和上游,是的,名稱需要匹配。

  • 考慮啟用proxy_redirect(默認)。 此選項修改Nginx是否干擾包括端口號在內的301和302重定向之類的響應。 關閉它意味着您的upsteam應用程序必須負責在任何重定向響應中傳遞正確的公共域名和端口。 將其保留為默認值意味着如果您不小心嘗試將客戶端定向到端口8080,則在某些情況下Nginx會將其更正為端口80。

您還沒有在nginx配置中包含/ excluded路徑。 加上

location /excluded {
    return 403;
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM