我试图限制访问某个pipe理页面。 然而,我有我的nginx.conf中的以下configuration:
server { listen 80; ## listen for ipv4; this line is default and implied root /var/www; server_name asdf; location / { proxy_pass http://192.168.1.1:88/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } #location /server/administrator/ { # allow 127.0.0.0/24; # allow my.ip/32; #} }
一切工作与这个configuration,请求传递给我的apache2监听端口88.但是,当我从我的访问限制删除评论,我的index.php正在下载,而不是处理。 也许有人看过这个?
如果您的管理页面位于192.168.1.1后端,则您的位置块需要如下所示
location /server/administrator/ { proxy_pass http://192.168.1.1:88; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; allow 127.0.0.0/24; allow my.ip/32; deny all; }
除了允许的两个外,你想拒绝所有的,你需要告诉nginx,在哪里代理你的请求到特定的位置
编辑:
如果管理页面在您的nginx框中,并且您希望执行它,则需要运行fastcgi或php-fpm。 与Apache不同,nginx本身并不提供php或其他服务器端脚本,但它可以使用fastcgi_pass而不是proxy_pass与fastcgi类的后端对话。
看看这个了解如何使用php-fpm运行nginx
http://www.lifelinux.com/how-to-install-nginx-and-php-fpm-on-centos-6-via-yum/
您的第一个位置正在传递给Apache,但第二个位置由NginX处理,NginX不知道PHP是什么,因此可以将其作为二进制文件下载。
您可以通过检查NginX提供的X-REAL-IP
头来简单地在server/administrator/index.php
设置访问控制。
if ($_SERVER["HTTP_X_REAL_IP"] != 'my IP') { if (false === strpos($_SERVER["HTTP_X_REAL_IP"], '127.0.0.')) { // 302 redirect to home Header("Location: http://yoursite/"); die("Access denied"); } }
server { listen 80; location / { proxy_pass http://192.168.1.1:88; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; location /server/administrator/ { allow 127.0.0.0/24; allow my.ip/32; proxy_pass http://192.168.1.1:88; } } }
您忘记了新位置的proxy_pass
。
看到: