解决Nginx端口冲突的排查方法示例

问题描述

一个Spring + Angular前后端分离的项目,使用Nginx进行数据转发。

Nginx监听端口8100,前台端口4200,后台端口8080。

像往常一样,提前配置好MySQL、配置好Redis,引入项目的Nginx配置文件,然后启动前台、后台,成功。

接下来出现了问题:前台发起的请求,只有极少数能被后台接收到,大部分都是404,随着在浏览器中的点击,控制台不断的出现404。

如果只是404,那问题就很简单,很大可能是Nginx端口转发设置错了。但它的神奇之处就在于,还有那么几次请求,是能到达后台的。

(上图中,显示保存成功的时候,后台确实输出了相关的控制台信息)

其他的小伙伴都没有出现这个问题,于是开始排查。

排查过程

为了搞清楚是 后端 的问题还是 Nginx 转发的问题,需要先从浏览器的NetWork中看一下这个404是后台返回的还是Nginx返回的。

经过查看,发现是Nginx返回的。如果是后台返回的404,会把错误信息写在HTTP请求头中。

先查看监听端口是否有冲突,使用nginx -T可以查看完整的Nginx配置文件,包括引入的外部文件。

// 测试配置文件是否正确,并输出完整的配置文件
nginx -T

在输出的结果中,只看到一个8100,说明虽然引入了多个项目,但并没有出现监听端口冲突。

然后笔者打算从Nginx日志中寻找一些蛛丝马迹。

开启Nginx的日志模式之后,查看日志文件,发现了上千条访问记录

大多数都是404,少数是200,但日志并没有提供什么有用的信息。

最终,还是在配置文件中发现了问题:

使用HomeBrew安装的Nginx,它的全局配置文件中,默认的监听端口就是8080,而项目后端占用的端口也是8080。

虽然对于端口监听和端口占用的原理不是很了解,至少可以知道,由于Nginx监听了8080端口,有一部分请求被发到了Nginx自己那里,另一部分才是发送到后台。

所以,修改全局配置文件,改掉默认端口,问题解决。

// 修改配置文件
sudo vim /usr/local/etc/nginx/nginx.conf
// 测试配置文件
nginx -t
// 重启Nginx
nginx -s reload

终于,所有的请求都能达到后台了。

总结

在一开始学习XAMPP的时候,就经常听到:“如果80端口冲突,就把端口改掉,比如改成8080”。

可是当8080成为了我们的习惯之后,有些项目也会使用这个端口...因此就要解决冲突问题了。

以后更改默认端口的时候,建议改成一个不可能用到的端口,比如10000以上的端口号,避免和项目的端口产生冲突。

到此这篇关于解决Nginx端口冲突的排查方法示例的文章就介绍到这了,更多相关Nginx端口冲突的排查方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • nginx 与后台端口冲突的解决

    问题: 在起alice管理系统的开发环境的时候,发现后台所有的接口在第一次请求的时候全部产生404错误,但第二次请求成功 定位问题 查看nginx 报错日志发现如下报错,因此错误的认为错误发生在html的文件夹权限不够导致的文件无法写入,于是开放权限之后发现还是不行,在Google一番查找还是没找到解决方案.暂时搁置,第二天重新找错时,无意的点开8081端口,当你访问localhost:8081与127.0.0.1:8081的内容竟然不同. 当时发觉是不是端口冲突了,于是打开文件下面是nginx

  • 解决Nginx端口冲突的排查方法示例

    问题描述 一个Spring + Angular前后端分离的项目,使用Nginx进行数据转发. Nginx监听端口8100,前台端口4200,后台端口8080. 像往常一样,提前配置好MySQL.配置好Redis,引入项目的Nginx配置文件,然后启动前台.后台,成功. 接下来出现了问题:前台发起的请求,只有极少数能被后台接收到,大部分都是404,随着在浏览器中的点击,控制台不断的出现404. 如果只是404,那问题就很简单,很大可能是Nginx端口转发设置错了.但它的神奇之处就在于,还有那么几次

  • 解决nginx 503 Service Temporarily Unavailable方法示例

    最近网站刷新后经常出现503 Service Temporarily Unavailable错误,有时有可以,联想到最近在nginx.conf里做了单ip访问次数限制,(limit_req_zone $binary_remote_addr zone=allips:20m rate=20r/s;) 把这个数量放大后在刷新发现问题解决.(还顺便把这个改大了 limit_req zone=allips burst=50 nodelay;   )为了证实该问题,反复改动该数量测试发现问题确实在这.这个数

  • nginx实现动静分离的方法示例

    目录 在server1上部署nginx 在server上部署lnmp node3部署httpd 实现分离部署 本文主要介绍了nginx实现动静分离的方法示例,具有一定的学习价值,具体如下 环境: 系统/主机名 IP地址 服务 Redhat8 :server1 192.168.244.131 nginx Redhat8:server2 192.168.244.133 lnmp Content7:node3 192.168.244.142 httpd 在三台主机上关闭防火墙 [root@server

  • Nginx location匹配规则的方法示例

    1.语法 location [=|~|~*|^~|@] /uri/ { ... } 2.说明 从上面的语法出发,可以了解到 location 可以区分为三个部分,接下来一个一个的研究一下. 1) [=|~|~*|^~|@] = : 表示精确匹配后面的url ~ : 表示正则匹配,但是区分大小写 ~* : 正则匹配,不区分大小写 ^~ : 表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 @ : "@" 定义一个命名的 location,使用在内部定向时,

  • Nginx设置wordpress伪静态的方法示例

    摘点度娘对伪静态的解释:伪静态是相对真实静态来讲的,通常我们为了增强搜索引擎的友好面,都将文章内容生成静态页面,但是有的朋友为了实时的显示一些信息.或者还想运用动态脚本解决一些问题.不能用静态的方式来展示网站内容.但是这就损失了对搜索引擎的友好面.怎么样在两者之间找个中间方法呢,这就产生了伪静态技术.就是展示出来的是以html一类的静态页面形式,但其实是用ASP一类的动态脚本来处理的. 首先,在Nginx中的server模块配置如下内容: location / { if (-f $request

  • 使用PM2+nginx部署python项目的方法示例

    之前面我们使用uwsgi部署项目比较繁琐,本章节介绍使用pm2+nginx一键部署django项目 PM2的主要特性: 内建负载均衡(使用Node cluster 集群模块) 后台运行 0秒停机重载,我理解大概意思是维护升级的时候不需要停机. 具有Ubuntu和CentOS 的启动脚本 停止不稳定的进程(避免无限循环) 控制台检测 提供 HTTP API 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 ) 一.安装PM2 1.安装nodejs sudo apt-g

  • Nginx服务器https配置的方法示例

    Linux:Linux version 3.10.0-123.9.3.el7.x86_64 Nginx:nginx/1.6.3 openssl:1.0.1e 申请证书 目前网上有不少机构提供个人免费 ssl 证书,有效期几个月到几年不等.以 StartSSL :https://www.startssl.com为例, 申请成功后有效期 3 年,到期后可免费续租. 具体申请过程也很简单. 注册登录以后选择 Certificates Wizard >> DV SSL Certificate 申请一个

  • Forever+nginx部署Node站点的方法示例

    最近入手了一款最便宜的腾讯云服务器,主要用来部署自己的个人博客以及学习一些liunx知识,从而全方面了解掌握web技术.强烈建议前端人员拥有一个属于自己的服务器.在写此文章之前,我的云服务器已经安装好Mysql以及node, nginx等.下面以部署node网站为例,讲解几个常见的场景 线程持久运行 一般来说,我们在window cmd上通过node index.js启动一个服务器,只要不关闭,就可以一直访问和调用接口.但是在linux上往往如果长时间不操作或者你要执行其他操作时候,你的node

  • 解决jquery版本冲突的有效方法

    用过jQuery的朋友都知道jQuery不同版本会引发冲突,本文就此问题提出有效的解决方案如下: 案例:解决jQuery1.3.2和1.4.2的冲突.(本例已测试通过!) 第一步:在1.4.2的源代码的最后加上一句 : var $j4 = jQuery.noConflict(true); 之所以在源码这里加,而不是像大多数文章提的在要用到的时候加,这是因为很多基于1.4.2的插件都要加,在这里加可以避免过多插件加这句代码导致重复.这一句是将1.4.2的jQuery和$的引用权限全部放弃.也就是基

  • 用uWSGI和Nginx部署Flask项目的方法示例

    概况 在开发过程中,我们一般直接用Python命令直接运行Flask程序.这样的运行只适合我们开发,方便我们调试.一旦程序部署到线上,这样运行的Flask程序性能会比较低.可以采用uWSGI+Nginx进行部署. uWSGI 在部署之前,我们得先了解几个概念 wsgi web应用程序之间的接口.它的作用就像是桥梁,连接在web服务器和web应用框架之间. uwsgi 是一种传输协议,用于定义传输信息的类型. uWSGI 是实现了uwsgi协议WSGI的web服务器. 部署 首先准备一个flask

随机推荐