如何配置Nginx使Django Admin仅在指定端口可访问?
问题解决:限制/admin仅能通过指定端口访问
你的问题出在443端口的Nginx配置上——location / 会匹配所有请求路径(包括/admin开头的请求),所以即便你在445端口单独配置了/admin的代理,443端口的location /依然会处理/admin请求,导致它能被访问。
修复后的Nginx配置
只需在443端口的server块中,新增一条专门拦截/admin路径的规则,直接拒绝这类请求即可:
server { listen 443 ssl; server_name abc.example.com; client_max_body_size 500M; ssl_certificate /etc/nginx/my.crt; ssl_certificate_key /etc/nginx/server.key; # 拦截443端口的/admin请求,返回403禁止访问 location /admin { return 403; } location / { proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $http_host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_pass http://localhost:3001; } } server{ listen 445 ssl; server_name abc.example.com; client_max_body_size 500M; ssl_certificate /etc/nginx/my.crt; ssl_certificate_key /etc/nginx/server.key; location /admin { proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $http_host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_pass http://localhost:3001; } # 可选:如果445端口只允许访问/admin,其他路径返回403 location / { return 403; } } server { listen 80; server_name abc.example.com; return 301 https://$host$request_uri; }
关键说明
- Nginx会优先匹配更具体的location规则,所以443端口中
location /admin的优先级高于location /,/admin请求会被直接拦截返回403。 - 可选:如果希望445端口仅开放/admin路径,其他请求一律拒绝,可以添加
location /返回403的规则,进一步收紧访问权限。
修改配置后,执行nginx -t检查语法正确性,再执行nginx -s reload使配置生效即可。
内容的提问来源于stack exchange,提问作者Neetesshhr
相关产品推荐
相关产品推荐

