我正在尝试限制对某个管理页面的访问。 不过我在nginx.conf中使用了以下配置:
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;
#}
}
所有内容都适用于此配置,请求将传递给我的apache2侦听端口88.但是,当我从访问限制中删除注释时,我的index.php正在下载而不是处理。也许有人之前见过这个?
答案 0 :(得分:1)
如果您的管理页面位于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
运行nginxhttp://www.lifelinux.com/how-to-install-nginx-and-php-fpm-on-centos-6-via-yum/
答案 1 :(得分:1)
您的第一个位置正在传递给Apache,但第二个位置由NginX处理,NginX不知道PHP是什么,因此允许您将其作为二进制文件下载。
您可以通过检查NginX提供的server/administrator/index.php
标头,在X-REAL-IP
中设置访问控制。
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");
}
}
答案 2 :(得分:0)
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
。
请参阅: