用nginx代理webmin

我试图代理webmin背后的nginx由于各种原因,这是超出了这个问题的范围。 不过,我一直在尝试一段时间,似乎无法弄清楚,并认为我已经耗尽了我能想到的所有configuration文件的排列。

我现在有什么:相关的nginxconfiguration(注释掉选项,我试了很多)

# Proxy for webmin location /admin/quackwall-webmin { proxy_pass http://127.0.0.1:10000; # Also tried ending with /admin/quackwall-webmin proxy_set_header Host $host; } 

/etc/webmin/config – 相关部分

 webprefix=/admin/quackwall-webmin webprefixnoredir=1 referer=(nginx domain name) 

Webmin本身位于标准端口上,暂时侦听所有地址以进行debugging。 目前SSL已被禁用。

所以我做了一个标准的login页面请求。 但是,所有的CSS和图像都被打破了,所有的资源都返回了标准的login页面。 在我看到的webmin miniserv日志

 127.0.0.1 - - [29/Oct/2012:12:29:00 -0400] "GET /admin/quackwall-webmin/session_login.cgi HTTP/1.0" 401 2453 127.0.0.1 - - [29/Oct/2012:12:29:01 -0400] "GET /admin/quackwall-webmin/unauthenticated/style.css HTTP/1.0" 401 2453 127.0.0.1 - - [29/Oct/2012:12:29:01 -0400] "GET /admin/quackwall-webmin/unauthenticated/sorttable.js HTTP/1.0" 401 2453 127.0.0.1 - - [29/Oct/2012:12:29:01 -0400] "GET /admin/quackwall-webmin/unauthenticated/toggleview.js HTTP/1.0" 401 2453 

所以所有的URL都返回401s。 有趣的是,ngrep似乎表明这些请求在nginx和webmin之间的后端通信中已经完成

 T 127.0.0.1:58908 -> 127.0.0.1:10000 [AP] POST /admin/quackwall-webmin/session_login.cgi HTTP/1.0..Host: (host)..Connection: close..User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW 64; rv:16.0) Gecko/20100101 Firefox/16.0..Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8..Accept-Language: en-US,en;q=0.5. .Accept-Encoding: gzip, deflate..Referer: http://(host)/admin/quackwall-webmin/session_login.cgi..Cookie: testing=1..Cache-Control: ma x-age=0..Content-Type: application/x-www-form-urlencoded..Content-Length: 41....page=%2F&user=(user)&pass=(pass) T 127.0.0.1:10000 -> 127.0.0.1:58908 [AP] HTTP/1.0 200 Document follows.. 

这些configuration选项和其他configuration的其他各种排列显示类似的结果,由nginx发送到webmin的URL是/admin/quackwall-webmin/session_login.cgi ,只是/session_login.cgi 。 所有给予201未经authentication的答复。 所有请求,即使那些有点成功(因为我实际上可以加载页面的资源)

webmin甚至支持webmin修改? 我究竟做错了什么? 我还有什么可以尝试?

哇,不知何故设法弄清楚了。 只是希望在付出赏金之前就明白了

本质上你必须要非常明确的configuration你的configuration,因为webmin总是想redirect你,而nginx有困难的时候试图重写和redirect它

为了帮助下一个人,请确保你已经告诉webmin它将在/etc/webmin/config中的另一个目录中

注意:斜杠在这个答案的其余部分非常重要。 然后去除导致原来的问题的痛苦和痛苦

 webprefix=/admin/quackwall-webmin webprefixnoredir=1 

接下来,你需要configurationnginx。 这是困难的部分,但我试图解释每个部分的作用

 # Proxy for webmin # Last slash is important location /admin/quackwall-webmin/ { # Tell nginx that we want to proxy everything here to the local webmin server # Last slash is important proxy_pass http://127.0.0.1:10000/; # Change the response Location: header to come from our proxy directory, not the server # Fixes initial redirect after login proxy_redirect http://$host:10000/ /admin/quackwall-webmin/; # Also fixes initial redirect after login proxy_set_header Host $host; } 

重新启动nginx和webmin,然后他们都应该工作。


注意,如果你的代理webmin通过nginx和webmin恰巧驻留在nginx所在的服务器上,你可以在/etc/webmin/miniserv.conf设置这些选项,

 bind=127.0.0.1 sockets= 
 location /admin/quackwall-webmin/ { proxy_pass http://127.0.0.1:10000/; proxy_set_header Host $host; }