前提是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,