Apache-2.2

Nginx 代理無法按預期工作

  • June 2, 2016

我在帶有 nginx 的主機上使用 dokku(小 heroku),我的容器正在使用 apache,它正在暴露埠 8052。

這是 .conf 中的配置,它已啟用並且工作正常:

LISTEN 8052
<VirtualHost *:8052>
   ServerAdmin veeenex@localhost

   DocumentRoot /var/www
   <Directory />
       Options +FollowSymLinks
       AllowOverride None
   </Directory>
   <Directory /var/www/>
       Options +FollowSymLinks +ExecCGI
       AllowOverride All
       Order allow,deny
       allow from all
   </Directory>

   FCGIWrapper /phpfarm/inst/php-5.2/bin/php-cgi .php
   AddHandler fcgid-script .php

   LogLevel warn
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

這是主機上的配置

upstream katalog.domain.eu {
 server 172.17.0.3:8052;
}

server {
 listen      [::]:80;
 listen      80;
 server_name katalog.domain.eu;
 access_log  /var/log/nginx/katalog.domain.eu-access.log;
 error_log   /var/log/nginx/katalog.domain.eu-error.log;


 location    / {
   proxy_pass  http://katalog.domain.eu;
   proxy_http_version 1.1;
   proxy_set_header        Host $host;
   proxy_set_header        X-Real-IP $remote_addr;
   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header        X-Forwarded-Proto $scheme;
   proxy_redirect http://172.17.0.3:8052 https://katalog.domain.eu;

 }

 include /home/dokku/katalog.domain.eu/nginx.conf.d/*.conf;
}

它正在工作-因為我可以在http://katalog.domain.eu上看到該網站,但是如果您點擊任何表單,則會執行操作(POST,…)網址,例如http://katalog.domain.eu/索引更改為http://katalog.domain.eu:8052/index

我已經嘗試過不同的proxy_set_headers,但都沒有奏效。我不想在伺服器上打開另一個埠來解決這個問題。

您需要檢查表單所在的頁面,並查看它在其中發出 POST 請求的 URL 是什麼。

如果是這樣http://katalog.domain.eu:8052,您需要更改生成該頁面的應用程序,以便它生成正確的 URL。

proxy_redirect僅更改代理響應中的LocationRefreshHTTP 標頭。它不會改變響應的實際內容。這是因為實際內容可以是任何內容(HTML、XML、二進制數據等),並且幾乎不可能在其上執行搜尋和替換操作。

引用自:https://serverfault.com/questions/780383