web应用程序配置服务端口,采用Nginx作反向代理时,访问网页出现404的问题解决的分析过程和解决方法

目录

一、问题描述

1、背景

2、问题详细描述

二、问题分析

1、错误的多个可能因素

2、原因分析

三、问题解决

1、 查看原来的nginx反向代理

(1)分析nginx配置

(2)nginx的重定向跳转

2、修改nginx反向代理

四、结果验证

1、刷新前

2、刷新后


一、问题描述

1、背景

        由于业务需要,需要再客户现场部署一套人脸系统,该系统原本使用8800端口作为网页访问端口,并通过该端口与监听在1212和3001端口的后端API进行交互。然而,由于客户方面因其他业务关系无法开放8800端口,转而提供了7200端口作为替代。

        鉴于直接修改网页访问端口存在困难,我们采用了在nginx上设置反向代理的解决方案。通过配置nginx,使其监听7200端口,并将来自该端口的请求转发至原本由8800端口负责的API服务(即1212和3001端口上的API及其参数)。

        这样,我们就实现了在不改变后端API配置的情况下,通过7200端口进行网页访问的功能。以下是相关的配置图:

2、问题详细描述

        根据前面的设想,我们在完成配置之后,可以直接通过7200端口来访问网页,实现顺利登录并且页面加载正常。实际操作界面如下图所示:

        然而,进行其他功能操作、或者使用CTRL+R刷新该页面后,无法正常加载并返回404错误。如下图所示。

        经过多次测试,每次登录都会正常加载,但是刷新后都会出现该错误。

二、问题分析


1、错误的多个可能因素

        404 Not Found错误是一个HTTP状态码,它表明客户端(如浏览器)尝试访问的服务器资源不存在。针对这个错误,我们可以从以下几个方面来分析和排查原因:

        (1)资源确实不存在:首先,应检查请求的URL是否正确,以及服务器上是否确实存在该资源(文件或目录)。

        (2)配置错误:其次,需要审查服务器配置,确保没有配置错误导致资源无法被正确路由或处理。

        (3)权限问题:虽然nginx以高权限启动,但文件系统权限、SELinux或AppArmor等安全模块可能仍然会阻止nginx访问某些文件。

        (4)代理配置问题:当使用nginx作为反向代理时,特别需要注意代理配置是否正确。比如,从8800端口代理到本地的7200端口时,需要确保代理规则涵盖了所有必要的路径,并且重定向规则也配置正确。

2、原因分析

        结合实际情况,我们可以排除以下可能性:

        (1)文件或目录不存在以及配置错误的情况,因为如果是这些问题,那么即便能够登录,用户也将无法访问任何资源,这与问题描述不符。

        (2)权限问题也被排除,因为nginx是以高权限账号启动的。

        因此,最有可能的原因是代理配置问题。为了验证这一假设,我们需要检查nginx的配置文件,特别是与代理和重定向相关的部分,以确保所有规则都已正确设置。

        通过这一步的审查,就可以找到导致404 Not Found错误的具体原因,并采取相应的措施进行修复。

三、问题解决


1、 查看原来的nginx反向代理

(1)分析nginx配置

        进入nginx的配置目录下,使用命令:

        vi nginx.conf

        可以查看nginx的配置,原来的配置如下:

        由上面可以看出,Nginx配置中缺少了重定向跳转的设置。这导致用户通过反向代理访问网页时,Nginx无法正确地将请求重定向到相应的资源,由此可能引发404错误。

(2)nginx的重定向跳转

        重定向跳转是Nginx服务器提供的一项功能,它允许管理员配置服务器,以便在客户端访问特定URL时,自动将其请求重定向到另一个URL。这一重定向过程实际上涉及URL的重写,它主要通过Nginx配置文件中的重写指令来实现,确保客户端能够无缝地访问到预期的资源。

2、修改nginx反向代理

        接下来就是在nginx配置中增加nginx的重定向跳转,非常简单,就在nginx.conf里增加

                try_files $uri $uri/ /index.html;

        这个语句即可,如下图所示:

        这个语句主要用于处理静态文件和目录的访问请求。它按照预设的顺序尝试查找指定的文件或目录,一旦找到就立即返回相应的资源。在这个过程中,$uri 变量被用来存储用户请求的 URL 路径部分。

        由于我目前尚未设置特定的 URI 路径,系统无法直接根据请求的 URL 路径找到对应的文件或目录。因此,在无法找到匹配项的情况下,系统会默认执行一个 fallback 操作,即返回当前路径下的 index.html 文件。这样的设计旨在确保当页面刷新或资源无法直接访问时,用户仍然能够看到一个有效的页面(即 index.html),从而避免显示 "404 Not Found" 错误页面。

四、结果验证

        在配置文件中加入重定向跳转语句后,保存配置并重启后,刷新后再也没有404错误了,如下图所示。所有网页,无论是刷新前还是刷新后都能正常返回。

1、刷新前

        页面刷新前的界面,如下图:

2、刷新后

        页面多次刷新后的界面,如下图:

        问题得到解决。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
随着Web应用程序的不断发展,越来越多的Web开发者需要处理跨域访问问题。尤其在网站开发中,标签<iframe>存在一些跨域问题,需要得到解决解决这些问题的一种方案是使用反向代理服务器。Nginx是一个功能强大的开源服务器软件,可以用来提供反向代理服务,也可以Web服务器、邮件服务器和负载均衡器。 在使用Nginx反向代理服务器,可以按如下步骤解决iframe跨域问题: 1.安装和配置Nginx。首先,您需要在服务器上安装Nginx,并确保nginx.conf文件正确配置配置反向代理服务器,将请求从原始服务器发送到新的服务器。 2.设置虚拟主机。为了使Nginx适用于您的网站,需要设置虚拟主机,配置主机的ip格式和端号。通常情况下,虚拟主机可以支持多个域名和主机名,可以同接收多个请求。 3.设置location指令。为了完成反向代理任务,可以使用location指令,将请求传递给正确的服务器,并且从指定的URL获取响应。具体而言,您需要在nginx.conf文件中指定location指令,并告诉Nginx需要向哪个服务器发送请求。 4.启用SSL。如果您的网站需要安全的传输,比如HTTPS,那么您可以使用SSL/TLS加密功能。在Nginx配置SSL,需要使用SSL module或者OpenSSL来启用。 总之,Nginx是一个非常强大的反向代理服务器,可以很好地解决网站开发中的问题。利用其反向代理功能,您可以很容易地解决iframe跨域访问问题,确保您的Web应用程序能够正常运行并保持安全性和高可用性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值