通过Nginx转发请求到服务器部署的应用

环境:CentOS

1.安装Nginx

在 CentOS 上,可以使用以下命令安装 Nginx:

sudo yum install nginx

如果你执行完这个返回了这个结果

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile

  • base: mirrors.qlu.edu.cn
  • extras: mirrors.qlu.edu.cn
  • updates: mirrors.nju.edu.cn

No package nginx available.
Error: Nothing to do

说明yum 未能找到名为 “nginx” 的软件包。这可能是因为 Nginx 的官方软件包源未被正确添加到你的 CentOS 系统,你需要添加 Nginx 的官方 YUM 仓库到你的系统中。通常,你可以使用以下命令来添加 Nginx 仓库:

sudo vi /etc/yum.repos.d/nginx.repo

在编辑器中,粘贴以下内容并保存文件:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/releasever/basearch/
gpgcheck=0
enabled=1

保存文件后,退出编辑器。
再次安装 Nginx:
现在,你可以再次运行以下命令来安装 Nginx:

sudo yum install nginx

如果一切设置正确,YUM 应该能够找到并安装 Nginx 软件包

2.修改Nginx配置文件

nginx -t

使用 nginx -t 命令会检查配置文件的语法错误,并报告配置文件的位置。

接着修改Nginx的配置文件,添加如下内容到http{}内,注意一定是在{}里面才是对的

server {
    listen 80;
    server_name 192.168.1.2;  # 替换成你的域名或IP地址

    location / {
        proxy_pass http://localhost:1714; #替换成你要指向的地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

改完之后,类似这样:

在这里插入图片描述
再使用上面的 nginx -t 命令检查 Nginx 配置文件的语法是否正确
如果没有语法错误,你将看到 “syntax is okay” 的消息。

3.重启Nginx

重新加载 Nginx 配置以应用更改:

sudo systemctl reload nginx

4.防火墙配置

如果你的服务器上启用了防火墙(如 firewalld),要开启新的防火墙端口,使用 firewall-cmd 命令。例如,你监听的端口80和应用程序的端口1714,可以运行:

sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=1714/tcp --permanent

–zone=public 指定了防火墙区域,你可以根据你的需求选择不同的区域,例如 --zone=internal。
–add-port=8080/tcp 指定了要开启的端口和传输协议(这里是 TCP)。
–permanent 表示你要将该规则永久保存,以便在系统重新启动后仍然生效。

5.重新加载防火墙规则

在添加新规则后,你需要重新加载防火墙规则,以使更改生效:

sudo firewall-cmd --reload

验证端口是否已开启:
使用以下命令来验证端口是否已成功开启:

sudo firewall-cmd --list-ports

6.测试应用是否正常启动

使用curl命令测试接口

curl -X POST -H "Content-Type: application/json" -d '{"key1": "value1", "key2": "value2"}' http://localhost:1714/user/list

在这里插入图片描述
OK,正常

7.测试Nginx是否正常转发请求

在这里插入图片描述
OK,配置成功

8.Nginx访问异常问题

其实我在实验过程是遇到问题的,Nginx没有权限调用,如下

在这里插入图片描述
异常日志的查看,目录是/var/log/nginx/error.log

解决办法是:

setsebool -P httpd_can_network_connect 1

这里是查阅资料说明

运行 setsebool -P httpd_can_network_connect 1 命令会尝试启用 SELinux 中的 httpd_can_network_connect 布尔值。这个布尔值控制了 Apache HTTP 服务器(httpd)是否允许进行网络连接。如果你的 Nginx 服务器正在运行并需要连接到本地或远程应用程序,这个命令可能有助于解决问题。
关于这个命令的注意事项:
这个命令只在使用 SELinux 的系统上有效。如果你的系统没有启用 SELinux,这个命令不会产生任何影响。
启用 httpd_can_network_connect 布尔值可能会使 SELinux 放宽 Apache HTTP 服务器的网络连接策略,允许它连接到更多目标。这可能对一些安全性敏感的环境造成潜在风险。
在某些情况下,启用这个布尔值可能有助于解决连接问题,但请谨慎使用。如果可能,最好了解 SELinux 策略并根据需要进行配置,以确保服务器的安全性。
启用 httpd_can_network_connect 布尔值可能对系统的整体安全性产生影响,因此建议仅在明确了解其影响并明确需要时使用。
最好的做法是在明确了解 SELinux 策略和你的服务器环境的情况下使用此命令。如果你不确定如何配置 SELinux,可能需要与系统管理员或安全专家联系以获取建议。

再试下应该是可以成功了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值