Nginx配置禁止IP访问
发表于:2022-01-17 |

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

大概是一个这样的架构:

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

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

1
2
3
4
5
6
然后重启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 "";
}
}
上一篇:
alpine-linux安装sudo的正确姿势
下一篇:
Docker:清理Docker占用的磁盘空间