# Nginx

Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

在高连接并发的情况下,Nginx是Apache服务器不错的替代品。

# Nginx 安装说明

由于直接使用 yum,或 apt-get 包管理工具安装 NginxNginx 的二进制安装文件会把相关开启的模块一起编译安装。但是,不是所有的官方模块默认都开启。所以可能导致缺失相关的模块对应的功能。

此外,如果想添加第三方的 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默认页面,显示如下便表示安装成功:

验证安装成功

# 注意事项

    1. 如果在云服务器安装,需要开启默认的nginx端口:80
    1. 如果在虚拟机安装,需要关闭防火墙
    1. 本地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 即可。

# 参考

更新时间: 9/22/2020, 6:10:48 PM