Nginx配置禁止IP访问

时间背景

使用Nginx代理服务,请求先到前端的代理服务器,然后由代理服务器的nginx转发请求到后端的服务器。
开始默认没有对IP访问做限制,现在要求禁止IP访问,

大概是一个这样的架构:
Nginx配置禁止IP访问_第1张图片

想要禁止IP访问,那么就直接修改后端的web服务器的配置,然后修改配置如下:

    # nginx.conf文件
    server {
        listen       80 default_server;
        server_name  _;
        return  200 "ip cannot access";
    }

然后重启Nginx服务,测试发现使用IP和域名都无法访问了,有点儿慌。

最后发现问题是proxy_pass的配置有问题,具体配置如下:

# 代理服务器配置
upstream backend{
    server 192.168.189.31:80;
}
server {
    listen       80;
    server_name  www.kaige.com;

    location / {
        proxy_pass http://backend; 
        proxy_buffer_size  128k;
        proxy_buffers 100  128k;
        proxy_busy_buffers_size 256k;
        proxy_connect_timeout 600s;
        proxy_send_timeout 1200;
        proxy_read_timeout 1200;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

上面的配置中,发现请求到后端服务器时并不是通过域名去访问的,也就是代理到后端服务器是没有携带域名,所以后端服务器并不知道域名,通过IP来处理请求。

修改后的配置:

upstream backend{
    server 192.168.189.31:80;
}
server {
    listen       80;
    server_name  www.kaige.com;

    location / {
        proxy_pass http://backend; 
        proxy_set_header Host $host;                     # 携带host请求到后端
        proxy_set_header X-Forwarded-For $remote_addr;   # 远端IP
        proxy_buffer_size  128k;
        proxy_buffers 100  128k;
        proxy_busy_buffers_size 256k;
        proxy_connect_timeout 600s;
        proxy_send_timeout 1200;
        proxy_read_timeout 1200;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

你可能感兴趣的:(Nginx,nginx,web)