最近要用nginx和uwsgi来实现最近用python写的无切片图像发布服务的负载均衡,研究了半天,打算记录下来,今天就先写一下nginx的安装过程~
0.确认本机是否安装了nginx
#查看进程列表
ps -ef | grep nginx
#查看nginx的进程id
ps -C nginx -o pid
#查看nginx程序
whereis nginx
#查看nginx版本
nginx -v
#测试nginx
nginx -t
1.下载 nginx
sudo wget http://nginx.org/download/nginx-1.4.2.tar.gz
2. 安装
sudo tar -zxvf nginx-1.4.2.tar.gz
cd nginx-1.4.2
./configure --prefix=/usr/local/nginx
sudo make
sudo make install
这里–prefix=后面跟的就是你想要编译结果存放的路径,./configure用法还有很多将就,我之后会搞一篇讲讲。
安装完毕后,测试一下
/usr/local/nginx/sbin/nginx -t
如果大家出现了我这个问题,ubantu就用apt-get,centos的用yum挑选一个安装,安装期间报错也没事,继续安装下一个。我都安装一遍然后就好了。。。
程序 'nginx' 已包含在下列软件包中:
* nginx-core
* nginx-extras
* nginx-full
* nginx-light
请要求管理员安装其中的一个
举例:
sudo apt-get install nginx-core
sudo apt-get install nginx-light
sudo apt-get install nginx-extras
sudo apt-get install nginx-full
3. 修改配置文件
如果就是默认启动的话,就不需要看这步了
找到 nginx.conf 我这里是在编译目录下/usr/local/nginx/conf里面有
vi /usr/local/nginx/conf/nginx.conf
listen为服务的端口
localhost修改为你的服务器IP地址,本机就用localhost就可以了
4. 启动nginx
4.1 直接启动
sudo nginx
或者
sudo start nginx
4.2 修改了配置文件,根据指定配置文件启动
sudo nginx -c /usr/local/nginx/conf/nginx.conf
4.3 如果已经启动,然后修改了配置文件,需要重新读取的
sudo nginx -s reload
5. 关闭nginx
5.1快速停止nginx
nginx -s stop
5.2 完整有序的停止nginx
相比第一个,会处理完已接到的所有请求后再关闭
nginx -s quit
5.3 其他停止nginx 方式
###获取进程号
ps -ef | grep nginx
###完整有序的停止Nginx
kill -QUIT 主进程号
###快速停止nginx
kill -TERM 主进程号
###强制停止Nginx
pkill -9 nginx
###平滑重启nginx:
kill -HUP 主进程号
##用PID文件停止Nginx 假设pid文件路径为/data/logs/nginx.pid
kill –QUIT `cat /data/logs/nginx.pid`
##用pid文件重新加载配置文件
kill –HUP `cat /data/logs/nginx.pid`
6. 错误情况收集
6.1 nginx: [error] CreateFile() “/logs/nginx.pid” failed 或者nginx: [error] Open() “/logs/nginx.pid” failed
pid文件就是一个纯文本文件,里面记录的是进程的pid号。 nginx使用了pid文件来记录master process的pid号,如果编译时没有指定,那它的路径就是: <prefix/logs/nginx.pid, 其中<prefix是nginx的安装路径。
(1)编译时配置路径
如果你想修改默认的pid文件路径,可以在编译时加入配置。参数如下:: ./configure –-pid-path=/data/test/ngx.pid 指定后,默认的pid文件路径就更改为:: /data/test/ngx.pid 。如果指定只是路径,没有pid的文件名,那么pid的文件名还是nginx.pid
(2)通过配置文件修改pid
除了使用默认值和通过编译时修改外,还可以通过在nginx的配置文件中修改,改成绝对路径。如下: pid /data/test/nginx.pid; 这里修改的值只对使用该配置文件的nginx有效。
我是安装之后才发现的这个错误,所以就采用的第二种
6.2 nginx: [emerg] open() “/etc/nginx/mime.types” failed (2: No such file or directory)
开启nginx服务时,报错找不到mime.types文件:
[root@CentOS init.d]# service nginx restart
nginx: [emerg] open() "/etc/nginx/mime.types" failed (2: No such file or directory) in /etc/nginx/nginx.conf:19
nginx: configuration file /etc/nginx/nginx.conf test faile
这里是因为我们在nginx 的启动脚本/etc/init.d/nginx 里修改了nginx配置文件 的目录:NGINX_CONF_FILE="/etc/nginx/nginx.conf" ,导致nginx.conf 和 mime.types 两个文件不在同一个目录下,系统找不到mime.types 文件报错,nginx配置文件默认在安装目录/conf/。把目录下的所有文件都复制一遍到nginx配置文件 的同级目录下即可。
或者你像我碰到这个
shk401@shinetekview:service-tile$ sudo nginx -c nginx.conf
nginx: [emerg] open() "/FY4COMM/webclient/webserver/ShinetekView-Group/service-tile/mime.types" failed (2: No such file or directory) in /FY4COMM/webclient/webserver/ShinetekView-Group/service-tile/nginx.conf:4
打开配置文件nginx.conf,把mime.types改成绝对路径也可以
6.3 nginx: [emerg] unknown log format “main” in /etc/nginx/nginx.conf:26
错误描述
[root@CentOS init.d]# service nginx restart
nginx: [emerg] unknown log format "main" in /etc/nginx/nginx.conf:26
nginx: configuration file /etc/nginx/nginx.conf test failed
原因分析
开启了main 格式的日志信息,但是找不到日志的格式main ,一般来说都是打开了这个选项:access_log /var/log/nginx/access.log main;。
解决方法
在access_log /var/log/nginx/access.log main; 的上面有个日志格式main ,默认是注释的,把这三行取消注释就OK了。
7. 检验成果
把服务器开起来后,在浏览器输入网址和端口号,看到这张图就恭喜了~
最后求关注,求点赞,欢迎大家关注我的公众号
记录所学所用,包括但不限于遥感、地信、气象、生态环境,机器学习知识,相关文献阅读,编程代码实现。偶尔荒腔走板的聊聊其他。欢迎不同领域的朋友们加入进来,多多交流。