Nginx
如何為proxy_pass指定nginx解析器的搜尋域名
假設我的伺服器是www.mydomain.com,在 Nginx 1.0.6 上
我正在嘗試將所有對http://www.mydomain.com/fetch的請求代理到其他主機,目標 URL 被指定為名為“url”的 GET 參數。
例如,當使用者請求任何一個時:
http://www.mydomain.com/fetch?url=http://another-server.mydomain.com/foo/bar http://www.mydomain.com/fetch?url=http://another-server/foo/bar
它應該被代理到
http://another-server.mydomain.com/foo/bar
我正在使用以下 nginx 配置,並且僅當 url 參數包含域名時才能正常工作,例如**http://another-server.mydomain.com/ …;但在http://another-server/上失敗…**錯誤:
another-server could not be resolved (3: Host not found)
nginx.conf 是:
http { ... # the DNS server resolver 171.10.129.16; server { listen 80; server_name localhost; root /path/to/site/root; location = /fetch { proxy_pass $arg_url; } }
這裡我想把所有沒有域名的URL解析為主機名在mydomain.com,在/etc/resolv.conf中,可以指定整個Linux系統的預設搜尋域名,但不影響nginx解析器:
search mydomain.com
在 Nginx 中可以嗎?或者,如何“重寫” url 參數以便我可以添加域名?
nginx自己做DNS解析,不使用libc庫,所以
/etc/resolv.conf
沒有效果。我找不到任何指定搜尋域的選項,因此重寫 URL 是您唯一的選擇。這樣的事情應該可以解決問題:location /fetch { # Don't rewrite if we've already rewritten or the request already contains the full domain if ($arg_url !~ mydomain.com) { rewrite ^/fetch?url=http://([^/]+)(/?.*)$ /fetch?url=http://$1.mydomain.com$2; } proxy_pass $arg_url; }