在PHP-FPM子目录中的Nginx维护模式(503)

我正在使用PHP-FPM的Nginx,我想限制访问我的网站上的PHP文件的子目录,以便只允许来自我的IP地址的stream量。

这是我所尝试的,假设我的IP是1.1.1.1:

location ^~ /blocktest/ { if ($remote_addr != "1.1.1.1") { return 503; } } 

这会阻止公众,但是PHP脚本不再为我执行,而只是提示下载原始文件。 所以,我尝试在块中包含我的PHPconfiguration文件,如下所示:

 location ^~ /blocktest/ { if ($remote_addr != "1.1.1.1") { return 503; } include /usr/local/nginx/conf/php.conf; } 

…但是公众可以再次访问PHP文件。 啊。 任何想法,我怎么能得到这个工作? 谢谢!

作为参考,这里是我的php.conf文件:

 location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_connect_timeout 60; #fastcgi_send_timeout 180; #fastcgi_read_timeout 180; fastcgi_send_timeout 2000; fastcgi_read_timeout 2000; fastcgi_buffer_size 256k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; } 

我已经明白了这一点。 显然,实际阻止PHP-FPM处理PHP文件的唯一方法是使用HttpAccessModule的“全部拒绝”,不能只是“返回503”。

这里是一个Nginxconfiguration代码片断,它定义了一个自定义的503错误页面,可以阻止所有公共访问子目录,包括由PHP-FPM生成的PHP文件。 您可以使用Nginx HttpAccessModule文档定义的规则来定义哪些IP可以访问被阻止的子目录。

 # DEFINE CUSTOM 503 ERROR PAGE error_page 503 /maintenance/503.htm; location = /maintenance/503.htm { internal; } # BLOCK A DIRECTORY location ^~ /directory_to_block/ { error_page 403 =503 /maintenance/503.htm; allow 1.1.1.1; # your IP here deny all; include /usr/local/nginx/conf/php.conf; } 

nginx只处理一个 location ,所以你需要在你想要限制的每个 location添加限制。 在你的情况下,你将不得不创build第二个location来处理子目录中的PHP文件,类似于第一个添加限制。