Nginx (engine x) 是一个高性能、轻量级的HTTP和反向代理web服务器,其特点是占有内存少,并发能力强。
环境准备
gcc
gcc是linux下的编译器,可以编译 C,C++,Ada,Object C和Java等语言,一般阿里云centos7环境自带安装。
1 | yum -y install gcc |
pcre、pcre-devel安装
pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式.
1 | yum install -y pcre pcre-devel |
gzip
zlib库提供了很多种压缩和解压缩方式,nginx允许使用zlib对http包的内容进行gzip,避免资源过大加载过慢
1 | yum install -y zlib zlib-devel |
openssl
openssl是web安全通信的基石,需要安装
1 | yum install -y openssl openssl-devel |
编译安装
安装有直接yum安装和源码编译安装两种,个人更喜欢源码编译安装,以下为源码编译安装的步骤
安装
Ngnix默认安装在/usr/local
下,新建并切换至nginx目录
1 | mkdir /usr/local/nginx && cd /usr/local/nginx |
前往官网获取安装包下载路径:http://nginx.org/download/
以nginx-1.21.3.tar.gz
为例,获取安装包
1 | wget http://nginx.org/download/nginx-1.21.3.tar.gz |
解压
1 | tar -zxvf nginx-1.21.3.tar.gz |
编译
进入解压后的文件夹
1 | cd nginx-1.21.3 |
编译源码文件时,通过configure
命令进行配置,若不添加参数,直接输入如下命令即可编译成功
1 | ./configure |
如果需要配置时添加其他模块,需要在后面跟上相关配置,如配置https所必须的http_ssl_module
模块
1 | ./configure --with-http_ssl_module |
配置相关参数和模块可参考:http://www.weixueyuan.net/a/604.html
编译后执行安装命令,默认在/usr/local/
创建nginx文件夹并安装到此位置
1 | make |
这里因为我已经事先创建了nginx
文件夹并处于/usr/local/nginx/nginx-1.21.3
,所以nginx自动被安装到了上一层目录内,回到上一层目录
1 | cd .. |
配置环境变量
nginx的执行文件位于/usr/local/ngnix/sbin
,里面只有一个nginx,很好确认,为了方便操作我需要将他加入环境变量
新增nginx环境变量文件
1 | vim /etc/profile.d/nginx.sh |
配置文件内容
1 | export PATH=$PATH:/usr/local/nginx/sbin |
重启服务器生效
nginx常用相关参数
1 | nginx -s reload # 重新加载配置文件后,重启nginx |
错误踩坑及处理
nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)
需要指定配置文件位置
1 | nginx -c /usr/local/nginx/conf/nginx.conf |
执行后再次执行nginx -s reload
即可
注册为系统服务并开机自启动
为了方便nginx应用进程的维护和管理,这里将其注册为系统服务,由systemd进行服务管理
新建nginx服务配置文件
1 | vim /usr/lib/systemd/system/nginx.service |
设置如下配置内容(记得删掉#后的注释)
1 | [Unit] |
详细配置文件内容参考另一篇文章centos系统服务相关
配置结束后执行下面命令就ok
1 | # 注册为开机自启动服务 |
错误踩坑及处理
错误信息:[error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
前往错误提示文件,发现为空文件
1 | vim /usr/local/nginx/logs/nginx.pid |
查看nginx运行的pid
1 | ps -ef |grep nginx |
将获取的pid写入nginx.pid
文件
1 | echo 18628 > /usr/local/nginx/logs/nginx.pid |
重新加载nginx
1 | nginx -s reload |