在CentOS/Windows下配置nginx(以及踩坑)
1. 序言
因为这类文章网上比较多,实际操作起来也大同小异,所以我并不会着重于详细配置方面,而是将我配置时踩的坑写出来。
2. CentOS
2.1 第一步下载nginx包
我选择将包放在/usr/local下
cd /usr/local
wget (nginx下载目录网址)
这里的下载目录可以根据需要选择版本从而决定
请点击nginx下载查看目录
2.2 安装nginx所需环境
yum install gcc-c++
yum install pcre
yum install pcre-devel
yum install zlib
yum install zlib-devel
yum install openssl
yum install openssl-devel
可以在安装之前执行update,当然,这看你的网速和处理速度咯,有些大哥一个update就是一个小时。
yum update
2.3 解压 安装
执行解压操作
tar -zxvf nginx-xxx(你所选择的版本号).tar.gz
进入刚刚解压完成的文件夹
cd /usr/local/nginx-xxx/
接下来configure & make & make install
./configure
make
make install
如果到这一步没有错误,那你已经完成了一半了。
2.4 配置服务
cd /lib/systemd/system/
vim nginx.service
这样应该会新建一个nginx的服务配置文件
press i 写入以下配置 写完 :wq
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注意点:
-
PIDFile的路径是你开启服务后会产生的那个nginx.pid文件,默认处于你nginx文件夹的logs目录下,同时在那个目录下还有error.log,这个文件很有用,有任何的错误,请仔细查看它,它一定会有所帮助。
-
ExecStartPre这个的作用是在服务启动前测试配置是否正确,看你的口味添加它吧。
-
ExecStart的路径是你nginx安装文件夹下/conf目录,作用是加载nginx.conf
2.5 设置开机启动等
systemctl enable nginx.service
systemctl start nginx.service
在这期间有遇到任何问题,就,就重启服务器吧。
你可以通过 # systemctl status nginx.service 这条命令来查看nginx服务状态。当Loaded: loaded,Active: active(running)时,就算完成了。悄悄说一句,修改完配置文件后都需要重新加载,最省事的办法就是重启服务器。当然,如果您的业务不允许频繁重启那么另当别论。像我这种自己搭着玩玩的就重启吧。
2.6 配置nginx
nginx默认监听80端口,所以做到这一步,输入你服务器的ip就应该可以出现欢迎界面。接下来我们要把自己的包放上去。
npm run build,把白天在公司写的东西打包,dist上传到服务器。
vim修改nginx安装目录下,conf/nginx.conf文件
可以将server {} 下的listen修改成其他端口号,可以将location / {root xxx;}修改成你的包想放在的地方,以下是我的配置。
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root dist;
index index.html index.htm index.nginx-debian.html;
try_files $uri $uri/ /index.html;
}
这样子,只需要把包扔进nginx/dist文件夹下,nginx就可以读取了。当然这是懒人做法,最好是把地址改成其他的,但要注意权限问题,否则会导致各种500错误。
3. Windows下的nginx配置
3.1 与在linux下的不同点
其实在windows下要简单许多,因为更为直观,但是有一些小坑会让人痛不欲生。
首先还是去官网下载你喜欢的版本,注意是nginx/Windows。
这里直接解压到你喜欢的目录即可。
可能到了这一步会很兴奋,但是要注意的是,不要双击nginx.exe。
而是用powerShell/cmd 进入目录,使用指令 start nginx 运行。
在运行之前可以修改nginx.conf,建议更改端口号以及location,以下是我的Windows的配置
listen 6789;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root d:/repo/dist;
index index.html index.htm index.nginx-debian.html;
try_files $uri $uri/ /index.html;
}
location /excel {
proxy_method POST;
proxy_pass http://*****:****/****$request_uri;
}
之后将打包后的dist替换d:/repo下的dist即可,本机访问只需localhost:6789,局域网内访问则只要ipconfig查一下ip带上端口号即可。
3.2 注意点
有时会出现各种各样的异常情况导致各种错误,请首先查看error.log,那里的报错非常详细。
- 如果遇到 (123: The filename, directory name, or volume label syntax is incorrect)这种错误,就需要查看路径是否配置正确。在Windows常犯的错误比如路径名直接copy,但是名称带有一些关键字,比如r,在Windows下默认右斜\\,就会发生将\\r识别成转义字符,导致路径莫名其妙错误。解决方案也很简单,要么所有右斜都用双右斜,要么就用左斜/。
- 在同事电脑上还遇到多个进程的错误。就是使用以下指令
tasklist /fi "imagename eq nginx.exe"
会出现4个进程,使用 nginx -s quit 也只能关掉两个进程。
这时就只能杀掉进程,否则无法出现正确结果。
关于Windows里的配置我写的并不是十分详细,我看过比较好的文章,在这里,大家也可以参考它。