2013-03-16 14 views
8

Używam Nginx jako odwrotnego proxy dla mojego wkraplania Apache'a i jako funkcji bezpieczeństwa blokuje dostęp do phpmyadmin, webalizera itp. Dla wszystkich z wyjątkiem localhost, ale używanie nginxa sprawia, że ​​Apache myśli, że to jest localhost, więc wyświetla go publicznie dla wszystkich.Nginx Block/Deny Dostęp do wielu lokalizacji regex

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

Muszę włączyć powyższy wzór wzorca dopasowując wyrażenie do następującego.

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

Bardzo doceniane za pomoc od każdego, kto zna się na regex w Nginx.

Poniższa metoda działa, ale przerywa normalne adresy URL, które byłyby przyjazne dla wyszukiwarek takich jak domain.com/forums/server-info

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

Odpowiedz

8

Jako, że wyrażenie apache ma "^", możemy wstawić '^', aby wymusić dopasowanie od początku ścieżki.

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 
} 

[EDYC] Dopasowany ciąg w nawiasach jest przechowywany w $ 1. Możesz więc wypróbować:

http://127.0.0.1:8080/$1 

jeśli tego chcesz. Jednak rozumiem, że chcesz przekazać całą ścieżkę uri do serwera apache. W takim przypadku łatwiej użyć zmiennej nginx $ request_uri.

+1

Tak, chcę przekazać go do apache dzięki "Chuan Ma" Jestem nowy w Nginx, ale kocham go w porównaniu do Apache. :) – C0nw0nk

+0

@ C0nw0nk Świetnie. Nigdy nie chcę wracać do Apache po użyciu nginx przez kilka lat. –

2

Wygląda jak masz go dość dużo. Dla bezpieczeństwa, nginx będzie czytać od góry do dołu, tak zostawić zaprzeczyć wszystkim na koniec:

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

Należy pamiętać, że będzie to dotyczyć dowolnego adresu URL jak /phpmyadmin itp Łącznie /someplaceelse/phpmyadmin. Możesz poprzedzić^do tego meczu tylko dla dopasowań http://host/phpmyadmin. Chociaż z tego powodu może być konieczne podzielenie tego na wiele dyrektyw dotyczących lokalizacji w tym przypadku.

Nie jestem pewien, co masz na myśli przez przyjazne dla wyszukiwarek. Jeśli chcesz, aby informacje o serwerze były dostępne, po prostu usuń je z regex | przypadki.

Dla pełnomocnika phpmyadmin:

location ^/phpmyadmin { 
    proxy_pass http://127.0.0.1:8080; 
} 

nginx weźmie wszystko w meczu lokalizacji i dołączyć go do http://127.0.0.1:8080

Można to zmienić, stosując ~, na przykład. http://wiki.nginx.org/HttpCoreModule#location

+0

Czy jesteś pewien, że twoja lokalizacja działa? Nie powinieneś używać '~'? – Gui13

Powiązane problemy