2013-03-16 10 views
8

Sto usando Nginx come proxy inverso per la mia instillazione Apache e come funzionalità di sicurezza blocca l'accesso a phpmyadmin, webalizer ecc per tutti tranne localhost ma usando nginx fa pensare ad Apache che sia localhost in modo che venga visualizzato pubblicamente per tutti.Nginx Block/Deny Accesso a più posizioni 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> 

Ho bisogno di attivare il modello di regole di cui sopra regex nel seguente.

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

Molto apprezzato per l'aiuto di chiunque abbia familiarità con regex in Nginx.

Il seguente metodo funziona, ma si rompe normali URL del sito che sarebbero motori di ricerca come ad esempio domain.com/forums/server-info

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

risposta

8

Come la regex dell'apache ha '^', possiamo mettere '^' per forzare la corrispondenza dall'inizio del percorso.

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 
} 

[MODIFICA] La stringa con corrispondenza all'interno delle parentesi è memorizzata in $ 1. Quindi puoi provare

http://127.0.0.1:8080/$1 

se è quello che vuoi. Tuttavia, la mia comprensione è che si desidera passare l'intero percorso uri al server Apache. In tal caso, è più semplice usare la variabile nginx $ request_uri.

+1

Sì, voglio passarlo ad Apache grazie "Chuan Ma" Sono nuovo a Nginx ma lo amo rispetto all'apache. :) – C0nw0nk

+0

@ C0nw0nk Grande. Non voglio mai tornare ad Apache dopo aver usato Nginx per un paio d'anni. –

2

Sembra che lo avete più o meno. Per la sicurezza, nginx leggerà dall'alto verso il basso, in modo da lasciare negare tutto per la fine:

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

Si noti che questo si applica a qualsiasi URL come /phpmyadmin, ecc Compreso /someplaceelse/phpmyadmin. Puoi anteporre un^a questa partita solo per le partite http://host/phpmyadmin. Anche se dal suono di esso potrebbe essere necessario dividere questo in più direttive di posizione in questo caso.

Non sono sicuro di cosa intendi per motore di ricerca. Se vuoi che le informazioni sul server siano accessibili, basta rimuoverle dalla regex | casi.

per il proxy phpMyAdmin:

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

nginx prenderà tutto nel match posizione e aggiungerlo al http://127.0.0.1:8080

È possibile modificare questo comportamento utilizzando ~, per esempio. http://wiki.nginx.org/HttpCoreModule#location

+0

Sei sicuro che la tua posizione funzioni? Non dovresti usare '~'? – Gui13

Problemi correlati