- 修改nginx.conf配置文件(/etc/nginx/nginx.conf)增加端口转发配置
server {
listen 8077;
location /common/captcha {
proxy_pass http://192.168.160.188:8070/;
}
}
- 保存配置文件,重启nginx(sudo service nginx restart),出现报错:
[root@m174 nginx]# service nginx restart
Redirecting to /bin/systemctl restart nginx.service
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.
nginx[4004341]: nginx: [emerg] bind() to 0.0.0.0:8077 failed (13: Permission denied)
- 这种情况,查看http允许访问的端口:
semanage port -l | grep http_port_t
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
- 将要启动的端口(8077)加入到如上端口列表中,重新启动nginx发现可以成功启动
semanage port -a -t http_port_t -p tcp 8077
第二类问题:访问需要转发的接口路径报错502 Bad Gateway
5. 查看nginx错误日志,错误显示如下:
connect() to 192.168.160.188:8070 failed (13: Permission denied) while connecting to upstream
- 这些错误,一般是由 SELinux 引起的(https://stackoverflow.com/questions/23948527/13-permission-denied-while-connecting-to-upstreamnginx)。
原因是,我们的 Linux 操作系统的 httpd 服务没有开启 httpd_can_network_connect 配置项,该配置项用于控制服务器是否可以连接到网络上的其他服务器,在 Nginx 配置反向代理后,我们访问 Nginx 所在的服务器,其要将请求反向代理到真正请求的服务器,此时需要 Nginx 所在的服务器发送 http 网络请求连接到网络上的其他服务器,但是由于 Nginx 所在的服务器的 httpd 服务没有开启 httpd_can_network_connect 配置项,所以 Nginx 所在的服务器无法发送网络请求,最后导致了上述报错。
因此,要解决上述报错,我们只需要将 httpd 服务的 httpd_can_network_connect 配置项开启即可。
查看 httpd 服务的 httpd_can_network_connect 配置项是否开启:
getsebool -a | grep httpd_can_network_connect
开启 httpd 服务的 httpd_can_network_connect 配置项:
setsebool -P httpd_can_network_connect 1
第三类问题:访问页面路径报错403
检查nginx配置文件首行,查看配置指定的user用户是谁,和当前用户是否一致
user root;