我使用Nginx作为我的Apache灌输的反向代理,并作为一个安全function,它阻止访问phpmyadmin,webalizer等除localhost之外的所有人,但使用nginx,它使Apache认为它是本地主机,所以它公开显示它为大家。
<LocationMatch "^/(?i:(?:xampp|security|phpmyadmin|licenses|webalizer|server-status|server-info))"> Order deny,allow Deny from all Allow from ::1 127.0.0.0/8 \ fc00::/7 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 \ fe80::/10 169.254.0.0/16 ErrorDocument 403 / </LocationMatch>
我需要把上面的规则模式匹配正则expression式到以下。
location /phpmyadmin { proxy_pass htt://127.0.0.1:8080/phpmyadmin; allow 127.0.0.1; deny all; }
非常感谢任何熟悉Nginx正则expression式的人的帮助。
下面的方法可以正常工作,但会破坏正常的站点URL,这些URL会像search引擎一样友好,如domain.com/forums/server-info
location ~ /(xampp|security|phpmyadmin|licenses|webalizer|server-status|server-info) { deny all; }
由于apache正则表达式有'^',所以我们可以把'^'从路径的开头强制匹配。
location ~ ^/(xampp|security|phpmyadmin|licenses|webalizer|server-status|server-info) { proxy_pass http://127.0.0.1:8080$request_uri; .... allow/deny directives come here }
[编辑]括号内的匹配字符串存储在$ 1。 所以你可以试试
http://127.0.0.1:8080/$1
如果那是你想要的。 不过,我的理解是,你想要通过整个URI路径到Apache服务器。 在这种情况下,使用nginx变量$ request_uri会更简单。
看起来你有很多。 为了安全起见,nginx会自上而下读取,所以最后请拒绝:
location /(xampp|security|phpmyadmin|licenses|webalizer|server-status|server-info) { allow from ::1; allow from fc00::/7; allow from fe80::/10; allow 127.0.0.0/8; allow 10.0.0.0/8; allow 172.16.0.0/12; allow 192.168.0.0/16; allow 169.254.0.0/16; deny all; }
请注意,这将适用于像/phpmyadmin
等任何网址包括/someplaceelse/phpmyadmin
。 你可以预先设定一个^来匹配http://host/phpmyadmin
匹配项。 虽然从它的声音,你可能不得不把它分成多个位置指令在这种情况下。
我不确定搜索引擎友好的意思。 如果你想要服务器信息是可访问的,只需从正则表达式中删除它 案例。
对于phpmyadmin代理:
location ^/phpmyadmin { proxy_pass http://127.0.0.1:8080; }
nginx将把所有的位置匹配并附加到http://127.0.0.1:8080
比如你可以用〜来修改这个行为。 http://wiki.nginx.org/HttpCoremodulee#location