2013-03-16 53 views
8

我使用Nginx作爲我的Apache灌輸的反向代理,並作爲一個安全功能,它阻止訪問phpmyadmin,webalizer等localhost,但使用nginx,它使Apache認爲它是localhost,所以它公開顯示給大家。Nginx的塊/拒絕訪問多個地點正則表達式

<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> 

我需要將上述規則模式匹配正則表達式轉換爲以下內容。

location /phpmyadmin { 
     proxy_pass   htt://127.0.0.1:8080/phpmyadmin; 
     allow 127.0.0.1; 
     deny all; 
    } 

非常感謝任何熟悉Nginx正則表達式的人的幫助。

下面的方法工作,但打破了正常的網站的網址,這將是搜索引擎友好如domain.com/forums/server-info

location ~ /(xampp|security|phpmyadmin|licenses|webalizer|server-status|server-info) { 
    deny all; 
} 

回答

8

由於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會更簡單。

+1

是的,我確實想把它傳遞給apache謝謝「川麻」我是Nginx的新手,但我比較愛它。 :) – C0nw0nk 2013-03-16 22:41:46

+0

@ C0nw0nk太好了。使用nginx幾年後,我從不想回到Apache。 – 2013-03-17 00:00:24

2

看起來你有它漂亮多了。 爲了安全,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; 
} 

注意,這將適用於任何URL像/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/HttpCoreModule#location

+0

你確定你的位置有效嗎?你不應該使用'〜'嗎? – Gui13 2017-02-21 14:52:24