重要的事情说三遍,你可以永远相信y总!!!

其实在我们的学习过程中,出了问题应该首先怀疑是不是自己的问题,其次再去质疑其他人的,无论最后谁对谁错。

y总的nginx配置自开课以来很多人使用过,自然是没有问题,跨域问题也在nginx上处理了,尽管有时候可能会有一些小问题,但你永远可以相信这个男人!!!

我的问题

先来说说我的问题吧:因为我的情况比较少见,当然也不少。我的服务器上本来就跑了博客,80和443端口必然是被占用了,所以我得用其他端口映射到docker的80和443。这就导致我的配置过程必定历经坎坷,事实也确实如此。

刚开始我在docker里的nginx按照y总的配置改了一下,其实y总的配置其他地方是不需要改的,只需要改域名和路径即可。当时我看到y总用了分配的域名马上就能访问了,我也试了试。很好,并不能访问。然后就开始有点急了,我看到配置中include其他网站的配置,因为 nginx.conf 其实是主要配置(也可以想象为全局配置),在这里简单的配置一下,然后include其他站点的配置,然后发现include的配置也监听了80,我在想它会不会先进来了这里,然后导致访问不了,其实到这里我就已经错了。因为急了,导致我认为在docker里的nginx应该监听8080(映射到宿主机的端口),脑子有点乱。

后来突然想到y总说过,腾讯云的服务器不能接入阿里的域名,所以我换成了自己的二级域名也就是 xxx.com,还是不行,这时候我应该也没换回监听80。我在想是不是因为二级域名会自动跳转到 www 的子域名中(这个我也不太清楚,使用这个域名会不会冲突,但事实直接访问二级域名它确实跳转到了那个子域名,应该也是不影响的,因为那是80端口)。然后换成 www 的子域名还是不行。这时候我去分享那里看到了几位大佬写的文章,其中的一两篇让我有种醍醐灌顶的感觉,瞬间就清醒了。

这里放一下大佬的链接

nginx快速配置多个项目上手(含一个详细案例) 两层nginx代理实现一个服务器部署多个项目(建议所有人解耦y总容器) 大菜狗

如何在nginx里面配置自己的域名 JasonQ1an

原来从一开始就想错了,因为这是一种套娃行为 不是 ,所以应该在宿主机做一层反向代理,但是因为docker映射出来的端口是一致的,所以并不需要做反向代理,而且这些文章有提到配置自己的域名,以及一个服务器多个项目的问题,但终究不是我遇到的问题,他们依然是80和443端口。但他们也让我清醒了许多,在此感谢两位大佬。

意识到这个问题后,我开始查看nginx的日志,但是日志居然输出了十六进制的数,我尼玛,那我咋看,然后开启了寻找如何转换成“正常字符”的道路。我一下午的时间一般花在了这鬼地方。虽然中途也看到了出现十六进制的原因,(原话是因为nginx的ssl没开启还是啥,导致http请求报文被截断导致请求日志被转为十六进制写入日志)但是nginx安装的时候是加入了ssl模块的,所以没有管他,后来找到的都是post或者get请求有中文,中文被转为十六进制数,也和我的问题无关(不过能格式化请求日志,倒也蛮不错)。

后来我干脆删掉443那个server,只保留80的,然后注释重定向,发现它居然跳转到了nginx的默认页面,废物大喜!!!接着我配置了一下 location / { proxy_pass htpp:// 127.0.0.1:8000},但是因为用了django的uswgi,并不需要nginx的这个反向代理。 location / {include /etc/nginx/uwsgi_params; uwsgi_pass 127.0.0.1:8000; uwsgi_read_timeout 60;} ,添加之后又能访问了,废物又又又狂喜。接下来就是https的问题了,刚开始我还以为是y总写的跨域请求处理有问题(但其实是没问题的,我换成网上的其他方法也是一样的结果),但在这里我忽略了一个很他妈重要的问题, http默认的端口是80,https默认的端口是443 ,就是这个问题一直存在导致我弄了这么久还是没成功。首先,我测试https的时候端口是8080,那必然不对的,因为默认443端口是不需要输入的,当然输入也行。其次就是css和js的地址我填的https但是!!端口是8080,我哭了。。。改了之后就可以了。配置文件不需要动,只要改域名和路径即可!!

在最后,希望大家遇到问题的时候能冷静下来,只有冷静下来才能解决问题,急是没用的,你遇到的问题一定是你现阶段能解决的。所以好好加油吧~~~

Q.E.D.


都懂一点,不是很懂的小捞仔