关于访问某个URL时nginx不能正确跳转到指定的根目录

最近公司项目采购系统已经开发的差很少了,同事测试完了以后让我帮忙部署,jar包搞上docker后,在同事配置nginx的时候出现了问题。html

除了nginx配置的时候除了域名不同,其余的则所有一致,这个时候访问的时候,却跳到另外一个项目的页面去。nginx

即好比要访问c.company.com,却跳到a.company.com的页面去,虽然域名仍是c.company.com。docker

百思不得其姐,先用./nginx -t 检查了一下配置是否出问题,结果没有错。测试

而后./nginx -s reload 后,查了下nginx的错误日志发现:日志

2019/11/29 13:47:35 [notice] 19479#0: signal process started
2019/11/29 13:47:35 [emerg] 3048#0: bind() to 0.0.0.0:9000 failed (98: Address already in use)
2019/11/29 13:47:35 [emerg] 3048#0: bind() to 0.0.0.0:9000 failed (98: Address already in use)
2019/11/29 13:47:35 [emerg] 3048#0: bind() to 0.0.0.0:9000 failed (98: Address already in use)
2019/11/29 13:47:35 [emerg] 3048#0: bind() to 0.0.0.0:9000 failed (98: Address already in use)
2019/11/29 13:47:35 [emerg] 3048#0: bind() to 0.0.0.0:9000 failed (98: Address already in use)
2019/11/29 13:47:35 [emerg] 3048#0: still could not bind()

发现9000这个端口绑定失败。
这个端口号是一个服务的端口,怎么跟nginx扯上关系了呢?code

其实由于一开始没先看日志,由于配置都是跟测试环境保持一致的,不知道什么缘由致使了跳转根目录失败:htm

好比a.company.com的根目录是/a,
c.company.com的根目录是/c,在我要访问c.company.com的时候,经过nginx日志看到访问的路径是:/a/index.html这样的目录。ssl

为何会出现这种问题呢?开发

其实就跟上面这个端口有关系。在个人nginx的conf.d目录中,有3个配置文件 :部署

a.conf
b.conf
c.conf

其中c.conf就是新项目的配置,上面出现的端口绑定失败是在b.conf中,其中的ssl配置出了问题,不知为什么不是配的443,而是9000。在将其修改为443以后就能够正常访问了。

总结一下修改后就恢复正常的缘由:
1.由于配置的语法没有问题,因此使用./nginx -t 是检测不出来问题的。

2.由于配置端口错误是在b.conf中,因此b.conf只是不能使用https,并不影响http使用,因此一直没有发现问题

3.之因此访问c.company.com会跳转到a.company.com的页面去,我猜是由于b.conf出了问题,nginx不能正确的加载下一个配置文件,由于a.company.com和c.company.com的域名解析都是在这同一台主机上,DNS解析的时候解析到当前主机,却不能正确的找到c.conf这个配置,因此只能默认加载到第一个配置文件a.conf上,致使出现访问c却跳到a的登录页面去。

nginx在加载配置的时候应该是按顺序加载进来,一旦某个配置文件有问题,将会致使下面要加载的配置文件不能正确加载。

若有问题,欢迎讨论( •̀ ω •́ )y

相关文章
相关标签/搜索