# Nginx
Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
# Nginx 安装说明
由于直接使用 yum
,或 apt-get
包管理工具安装 Nginx
,Nginx
的二进制安装文件会把相关开启的模块一起编译安装。但是,不是所有的官方模块默认都开启。所以可能导致缺失相关的模块对应的功能。
此外,如果想添加第三方的 Nginx
模块,必须使用编译 Nginx
的方式,才能把第三方生态的强大功能模块集成进 Nginx
。实现各种需求。
所以,为了更好的,更灵活的满足需求,我们使用编译的方法安装 Nginx
。
# Nginx 安装
# 下载源码
去官网 http://nginx.org/ 下载对应的nginx包,推荐使用稳定版本
wget http://nginx.org/download/nginx-1.16.1.tar.gz
解压,需要注意,解压后得到的是源码,源码需要编译后才能安装
tar -xzf nginx-1.16.1.tar.gz
# 安装依赖环境
1.安装gcc环境
yum install gcc-c++
2.安装PCRE库,用于解析正则表达式
yum install -y pcre pcre-devel
3.zlib压缩和解压缩依赖
yum install -y zlib zlib-devel
4.SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https
yum install -y openssl openssl-devel
# 执行 configure
编译之前,由于 configure
参数依赖 /var/temp/nginx
目录,所以先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错
mkdir /var/temp/nginx -p
在 nginx-1.16.1
目录下,输入如下命令进行配置,目的是为了创建 makefile
文件
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
可以使用 ./configure --help
查看,configure 过程中支持的参数。
这些参数可以指定 nginx 运行中依赖的辅助文件,以及编译时将哪些模块集成到nginx中。或依赖的第三方模块等等。
部分参数说明:
命令 | 解释 |
---|---|
–prefix | 指定nginx安装目录 |
–pid-path | 指向nginx的pid |
–lock-path | 锁定安装文件,防止被恶意篡改或误操作 |
–error-log | 错误日志 |
–http-log-path | http日志 |
–with-http_gzip_static_module | 启用gzip模块,在线实时压缩输出数据流 |
–http-client-body-temp-path | 设定客户端请求的临时目录 |
–http-proxy-temp-path | 设定http代理临时目录 |
–http-fastcgi-temp-path | 设定fastcgi临时目录 |
–http-uwsgi-temp-path | 设定uwsgi临时目录 |
–http-scgi-temp-path | 设定scgi临时目录 |
# 编译
执行 make
# 安装
执行 make install
# 启动
查看 nginx 安装位置:
[root@nginx01 nginx]# whereis nginx
nginx: /usr/local/nginx
[root@nginx01 nginx]# cd /usr/local/nginx
[root@nginx01 nginx]# ll
total 4
drwxr-xr-x. 2 root root 4096 Sep 20 11:09 conf
drwxr-xr-x. 2 root root 40 Sep 20 11:09 html
drwxr-xr-x. 2 root root 36 Sep 20 11:33 sbin
进入 /usr/local/nginx/sbin
目录启动 nginx
./nginx
# 验证安装成功
打开浏览器,访问虚拟机所处内网ip即可打开nginx默认页面,显示如下便表示安装成功:
# 注意事项
- 如果在云服务器安装,需要开启默认的nginx端口:80
- 如果在虚拟机安装,需要关闭防火墙
- 本地win或mac需要关闭防火墙
# 问题解决
# 重启nginx报错
每次虚拟机重启后,var/run/nginx
,这个文件夹都被被删除了。会导致出现 [emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
的错误。
解决方法:
(1)进入nginx安装目录, cd /usr/local/nginx/conf/
目录,编辑配置文件 nginx.conf
;
(2)在配置文件中有个注释的地方: #pid logs/nginx.pid
;
(3)将注释放开;
(4)在 /usr/local/nginx
目录下创建 logs
目录:mkdir /usr/local/nginx/logs
(5)启动nginx服务:/usr/local/nginx/sbin/nginx
# 开机自启Nginx服务
# 基于Systemd实现开机自启
在系统服务目录里创建 nginx.service
文件
vi /usr/lib/systemd/system/nginx.service
写入内容如下:
[Unit]
Description=The NGINX HTTP and reverse proxy server #描述服务
After=syslog.target network-online.target remote-fs.target nss-lookup.target #描述服务类别
Wants=network-online.target
[Service]
Type=forking #是后台运行的形式
PIDFile=/var/run/nginx/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx #服务的具体运行命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload #重启命令
ExecStop=/bin/kill -s QUIT $MAINPID #停止命令
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
修改nginx.service
文件权限,chmod 754 nginx.service
。
然后 systemctl enable nginx
即可。