前提是gunicorn已经配置完成,能正常访问。
1.使用的nginx中的配置项
在nginx.conf添加自定义项,方便管理
include /etc/nginx/conf.d/*.conf;
自定义配置项内容
server{ listen 8443; server_name 172.16.128.145; #写你的域名或者IP access_log /etc/nginx/logs/fastapi/access.log main; error_log /etc/nginx/logs/fastapi/error.log; location / { proxy_pass http://127.0.0.1:8040; #Django服务访问使用的端口或是gunicorn配置的端口 proxy_set_header Host $host; #捕获客户端真实IP proxy_set_header X-Real-IP $remote_addr; #$remote_addr 代表客户端IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
2.监听窗口
其中8443为nginx监听的窗口,这个port不能随便设置,SELinux只开放了几个端口给web端应用
查看可以设置的port
semanage port --list
查看开通的http接口:http_port_t 80, 81, 443, 488, 8008, 8009, 8443, 9000
这些是不需要添加
如果要自定义接口,那么需要
semanage port -a -t http_port_t -p tcp <port>
如果port设置的不是默认的接口,那么你将无法连接到nginx,如下
3.连接nginx+gunicorn
如果port设置正确,但是访问出现NGINX 502 Bad Gateway
那此时说明能访问nginx,port的设置是没有问题,应当查看日志,我使用的centos,日志位置是/var/log/nginx/error.log
2021/09/07 16:37:00 [crit] 2829164#0: *54 connect() to 127.0.0.1:8040 failed (13: Permission denied) while connecting to upstream, client: 172.16.16.114, server: www.test.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8040/", host: "www.test.com:8443"
此时修改httpd访问网络配置httpd_can_network_connect
写入配置文件的命令,重启后保留
setsebool -P httpd_can_network_connect 1
4.重启nginx
systemctl reload nginx
此时可以发现能正常访问
参考文章
1.NGINX 502 Bad Gateway: Gunicorn
2.connect() to 127.0.0.1:8080 failed (13: Permission denied) while connecting to upstream,