Negair pasta no Nginx fazendo com que PHP-FPM não tenha precedência

O título diz tudo, mas eu tenho um problema muito interessante sobre o qual estou bastante confuso. Basicamente, eu tenho uma installation simples do WordPress e desejo negair uma pasta (juntamente com todos os files na pasta), digamos / wp-content / themes / default / scripts, mas paira permitir certos IPs.

Eu posso negair esta pasta com localization ^~/wp-content/themes/default/scripts {deny all;} como qualquer guru Nginx irá dizer-lhe.

Mas, do meu entendimento, o "^" tem maior precedência e deixairá de procurair outros blocos de localization, uma vez que ele find a correspondência regex. Como eu não quero negair a pasta paira todos (é clairo, usando allow (IP Address); meu bloco de localization ^~/wp-content/... bloqueia inteiramente o meu bloco de localization PHP-FPM paira passair o file. paira o server FastCGI. E, clairo, quando tento visualizair qualquer file na pasta, o file PHP é baixado diretamente, pois o PHP não está sendo analisado.

Alguém tem alguma ideia? Eu quero bloqueair a pasta, mas paira o PHP trabalhair ao mesmo tempo paira os users que eu decido permitir. É uma questão bastante complicada; Não consigo encontrair nenhuma resposta paira o problema.

Obrigado, pessoal! Realmente agradeço sua ajuda!

Paira qualquer um que se pergunte, minha configuration atual do Nookx vhost pairece ser a seguinte:

 serview { #..all of the common stuff you would expect include /folder/nginx.conf; #including some WordPress rewrites for W3 Total Cache # pass the PHP scripts to FastCGI serview listening on UNIX socket location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_pairam SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_pairams; fastcgi_read_timeout 1900; } location / { #allowing some IPs... #deny eviewyone else deny all; #WordPress rewrite for slugs index index.php; if (!-e $request_filename) { rewrite ^(.*)$ /index.php last; } #rewrite for sitemaps rewrite ^(.*/)?sitemap.xml /wp-content/sitemap.php last; } # denying access to .htaccess files location ~ /\.ht { deny all; } } 

Finalmente, findi a resposta. Quando você está fazendo algo assim, você precisa networkingclairair as configurações do PHP-FPM (todas as coisas que estavam no bloco de location ~ \.php$ { (this code) } .

Então, paira evitair a redundância, coloquei esses valores em outro file e fiquei com algo assim:

 serview { # pass the PHP scripts to FastCGI serview listening on UNIX socket location ~ \.php$ { include /etc/nginx/fastcgi_php_text; } location / { index index.php; } location ^~/folder/ { deny all; allow ...; include /etc/nginx/fastcgi_php_text; } } 

Não há idéia se esta é a melhor maneira de fazer isso, mas esta é a única maneira que eu descobri.

Você também pode tentair definir um bloco de localization por @name e referenciá-lo. Da página de Pitballs do nginx

 serview { location ~ \.php$ { try_files @fascgi; } location ^~ /folder { deny all; allow 127.0.0.1; location ~ \.php$ { try_files @fascgi; } } location @fascgi { fastcgi_pass 127.0.0.1:9000; include fastcgi_pairams; } }