Nginx是一款高性能Http服务器,其最大的用途是作为负载均衡和反向代理(端口转发)的工具。
昨天晚上闲来无事,上了下阿里云发现自己的域名和服务器都还没过期,所以就把自己的域名绑定到服务器地址上,做了一个DNS解析。但是我发现,每次需要访问8888端口时仍需要使用 域名:8888 这种方式访问,所以我想用Nginx做一个反向代理,将默认打开的80端口转发到8080端口中,以实现用域名直接访问8888端口的目的。
部署安装都很顺利,对着流程一套做下来,没有太大问题(唯一的问题是服务器的apt版本太老,需要升级:apt -get update
)。
之后,进入/etc/nginx
后,输入./nginx
,启动nginx,这时提示80端口已经被占用(或许是之前安装过nginx没有清理干净),所以这是第一个问题,现在需要杀死nginx的进程:
killall -9 nginx
杀死nginx进程后,再次启动,完成,一切到目前为止还算顺利,在浏览器中直接输入域名即默认打开了80端口,可以看到Nginx的欢迎页:
接下来就是最主要的一步:做端口映射。我需要把80端口给映射到8888端口,进入conf文件夹,vi nginx.conf
修改端口映射,一开始我将其改为这样:
server {
listen 80;
server_name 127.0.0.1:8888;
}
然后:wq!
退出并保存内容,然后按照以前刷新配置文件的方式一样使用
source conf/nginx.conf
加载更新的内容,这时报错:
worker_processes: command not found
Failed to convert URI from command line into object reference. BAD_PARAM (BAD_PARAM_BadSchemeName)
worker_connections: command not found
-bash: nginx.conf: line 17: syntax error near unexpected token `}'
-bash: nginx.conf: line 17: `}'
在这卡了很久,让我一度以为是nginx没有安装完整或者是服务器依赖的问题,所有我重新安装nginx并且重新下载了所有所需依赖,最后发现问题还是存在。最后我找到一篇帖子,里边有人评论说这是nginx的一个bug,不用理会,只要nginx的启动过程不报错就行了,此刻我的内心十分复杂,搞了半天原来是它本身的bug,但是这样也就算解决了吧。
由于修改了配置文件,所以必须要重新启动nginx才能让其生效,所以我使用了nginx -s stop
命令,之后就算一连串的报错:
The program 'nginx' can be found in the following packages:
* nginx-extras
* nginx-full
* nginx-light
Try: apt-get install <selected package>
所以我又把这些所需的依赖都装了一遍:
apt-get install nginx-extras
apt-get install nginx-full
apt-get install nginx-light
然后继续使用stop命令将其暂停,继续报错:
nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)
这里也卡了很久,各种百度谷歌都在说需要在哪个哪个目录创建一个nginx文件夹,然后复杂nginx.pid到某个文件夹下,试了一遍还是不行,最后找到解决办法:
直接使用killall -9 nginx
杀死nginx进程在使用./nginx
启动nginx,配置文件就可以被加载到了。
前面的几步都完成后,配置的80端口映射到8888端口仍不起作用,访问域名后仍然打开的80端口,所以我又回到第三步,最后发现不起作用的原因是:
我只配置了server_name,即虚拟主机名,但是却没有配置proxy_pass,即反向代理路径,所以我为server{}中添加以下内容,终于搞定了端口的映射:
server {
listen 80;
server_name 127.0.0.1:8888;
location / {
proxy_pass http://127.0.0.1:8888;
}
}
最后,80端口成功地被映射到本机的8888端口上,Nginx反向代理的端口转发成功了。
总结:从发现问题到解决问题一共花了三个多钟头,其实有许多问题的出现就是因为之前没有遇见过,以及许多问题或许根本不是会造成异常的问题,加上被各路博客的带偏(参考了几十个博客),最后越搞越乱。所以说要解决问题,还是需要发现问题的核心是什么,如何才能迅速发现问题的核心?那就需要多实践,多踩坑才能做到。现在踩的坑,就是以后站住脚的基石。