nginx环境设置

# 各系统安装

# centos系统下

# 安装

查看当前版本配置

可以通过 nginx -V 命令来查看版本以及支持的配置。

# 安装前准备

# 安装依赖库

sudo yum -y install yum-utils
sudo yum -y install gcc gcc-c++ # nginx 编译时依赖 gcc 环境
sudo yum -y install pcre pcre-devel # 让 nginx 支持重写功能
# zlib 库提供了很多压缩和解压缩的方式,nginx 使用 zlib 对 http 包内容进行 gzip 压缩
sudo yum -y install zlib zlib-devel 
sudo yum -y install openssl openssl-devel # 安全套接字层密码库,用于通信加密


yum install initscripts
#Once the installation is completed, you can use the Service command to handle various Linux services-
service service-name start|stop|restart|reload
1
2
3
4
5
6
7
8
9
10
11

安装gcc等编译环境

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
1

# 命令行方式

sudo yum -y install nginx   # 安装 nginx
sudo yum remove nginx  # 卸载 nginx
1
2

使用 yum 进行 Nginx 安装时,Nginx 配置文件在 /etc/nginx 目录下。

ps: 安装时, 提示没有可用的软件包,

原因是nginx位于第三方的yum源里面,而不在centos官方yum源里面 很多软件包在yum里面没有的;

解决的方法,就是使用epel源,也就是安装epel-release软件包。EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS等系统。可以在下面的网址上找到对应的系统版本,架构的软件包

  • 解决办法,安装epel
sudo yum install epel-release
yum update
1
2

重试yum install -y nginx

# rpm方式

添加RPM包进行安装

#添加Nginx包
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

#安装
sudo yum -y install nginx
1
2
3
4
5

# 源码包方式

安装必要的库:

yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
1

安装 PCRE pcre-devel,PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。

将准备好的 nginx-1.18.0.tar.gz 包,拷贝至 /usr/local/nginx 目录下(一般习惯在此目录下进行安装)进行解压缩。

源码包下载地址:nginx.org/en/download… (opens new window)

wget http://nginx.org/download/nginx-1.18.0.tar.gz
1
$ sudo tar -zxvf  nginx-1.18.0.tar.gz # 解压缩
1

在完成解压缩后,进入 nginx-1.18.0 目录进行源码编译安装。

cd nginx-1.18.0
./configure --prefix=/usr/local/nginx # 检查平台安装环境
  # --prefix=/usr/local/nginx  是 nginx 编译安装的目录(推荐),安装完后会在此目录下生成相关文件
  
# useradd -s /sbin/nologin nginx 
 #./configure \
 --prefix=/usr/local/nginx \
 --sbin-path=/usr/local/nginx/sbin/nginx \
 --conf-path=/usr/local/nginx/conf/nginx.conf \
 --error-log-path=/var/log/nginx/error.log \
 --http-log-path=/var/log/nginx/access.log \
 --pid-path=/var/run/nginx/nginx.pid
 #--user=nginx  --group=nginx
 
 ./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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

如果前面的依赖库都安装成功后,执行 ./configure --prefix=/usr/local/nginx 命令会显示一些环境信息。如果出现错误,一般是依赖库没有安装完成,可按照错误提示信息进行所缺的依赖库安装。

表示成功:

image-20220215173737136

进行源码编译并安装 nginx

$ make # 编译
$ make install # 安装

make && make install
1
2
3
4

/configure配置环境 make是编译的意思。就是把源码包编译成二进制可执行文件

make install 就是安装的意思。

make && make install的意思就是执行make如果没有发生错误就执行make install

源码包安装与 yum 安装的 nginx 服务操作命令也不同。

把nginx命令添加到环境变量

使用软连接将nginx链接到/usr/local/sbin

#ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
#ll /usr/local/sbin/ | grep "nginx"

# 通过软连接,这样就可以直接使用 nginx 执行
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
1
2
3
4
5

添加到环境变量PATH; 上面已经配置了全局的,这里不用再次设置;

echo $PATH
vim ~/.bash_profile

export PATH=$PATH:/usr/local/nginx/sbin

source ~/.bash_profile
1
2
3
4
5
6
  • 启动服务
#/usr/local/nginx/sbin/nginx
nginx
1
2
  • 重新加载服务
#/usr/local/nginx/sbin/nginx -s reload
nginx -s reload
1
2
  • 停止服务
#/usr/local/nginx/sbin/nginx -s stop
nginx -s stop
1
2

查看 nginx 服务进程

ps -ef | grep nginx # 查看服务进程
1

# docker方式安装

# 简单方式
docker run --name nginx-test -p 18088:80 -d nginx``
1

配置挂载:

docker run \
-p 80:80 \
--name my-nginx \
--restart=always \
-v /opt/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /opt/docker/nginx/html:/usr/share/nginx/html \
-v /opt/docker/nginx/logs:/var/log/nginx \
-d \
nginx
1
2
3
4
5
6
7
8
9
10

管理容器

docker exec -it 容器id /bin/bash #进入容器
#容器重启、重新加载
docker exec -t 容器id nginx -t
docker exec -t 容器id nginx -s reload
1
2
3
4
# 源码方式

Dockefile

FROM centos:7
ADD install_nginx.sh /install_nginx.sh 
COPY nginx-1.18.0.tar.gz /nginx/
WORKDIR /nginx/
RUN bash /install_nginx.sh # 触发安装脚本
EXPOSE 80
#CMD ["nginx"]
#ENTRYPOINT /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# ENTRYPOINT /usr/sbin/nginx && tail -f /etc/passwd

# CMD ["nginx", "-g", "daemon off;"]
# CMD ["/usr/sbin/nginx", "-g" ,"daemon off;"]
CMD ["nginx", "-g", "daemon off;"]
1
2
3
4
5
6
7
8
9
10
11
12
13

外部启动方式挂载:

docker run --name testImportSnapshot -p 8094:80 -d username/nginx-importsnapshot nginx -g 'daemon off;'
1

install_nginx.sh

#!/bin/bash
nginx_package="nginx-1.18.0.tar.gz"
# 安装环境依赖
yum -y install gcc gcc-c++ make pcre* zlib-devel autoconf automake
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
# 创建用户与组
# groupadd nginx
# useradd -g nginx nginx -M -s /sbin/nologin
# 编译安装
cd /srv/app/soft/nginx
tar -xf $nginx_package
cd ${nginx_package%.tar.*} \ 
  ./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 \
  #--user=nginx  --group=nginx \  
  && make && make install\
  && ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
RUN unzip -d  /srv/app/ /srv/app/portal/AAWeb.zip
RUN cp -rf /srv/app/soft/nginx/nginx.conf /usr/local/nginx/conf/
# 容器中没有后台进程的概念,把nginx放到前台
echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf

#启动方式:下面三种;
#nohup nginx &
nginx -c /usr/local/nginx/conf/nginx.conf 

#放在最后面;
nginx -g "daemon off;"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

build.sh

#!/bin/bash
docker build -t autorun-test .
1
2

start.sh

#!/bin/bash
docker stop autorun-test
docker rm autorun-test
docker run -it -p 19876:80  --name autorun-test autorun-test /bin/bash 
 
# curl localhost
# curl http://127.0.0.1
1
2
3
4
5
6
7

# 配置启动

# 开机启动服务

非必须设置;

#vim /etc/systemd/system/nginx.service

vi /usr/lib/systemd/system/nginx.service
1
2
3

粘贴以下内容

[Unit]
Description=nginx
After=network.target
  
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
  
[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13

服务的说明

  • Description:描述服务
  • After:描述服务类别
  • [Service]服务运行参数的设置
  • Type=forking是后台运行的形式
  • ExecStart为服务的具体运行命令
  • ExecReload为重启命令
  • ExecStop为停止命令
  • PrivateTmp=True表示给服务分配独立的临时空间
  • 注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
  • [Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
# 设置开机启动
systemctl daemon-reload 
systemctl enable nginx.service
systemctl status nginx.service

systemctl disable nginx #取消开机自启动
1
2
3
4
5

杀死nginx重启nginx

pkill -9 nginx
ps aux | grep nginx
systemctl start nginx
1
2
3

再次查看状态,变成了active,搞定。

其他常用命令

# systemctl start nginx.service          启动nginx服务
# systemctl stop nginx.service           停止服务
# systemctl restart nginx.service        重新启动服务
# systemctl list-units --type=service     查看所有已启动的服务
# systemctl status nginx.service          查看服务当前状态
# systemctl enable nginx.service          设置开机自启动
# systemctl disable nginx.service         停止开机自启动
1
2
3
4
5
6
7

设置服务启动脚本

非必须设置;

cp /usr/local/nginx/sbin/nginx /etc/init.d/nginx
service nginx start
1
2

# 重启服务器验证

reboot

再次连接后,查看服务状态 systemctl status nginx.service

看到nginx已经启动,至此,nginx自启动配置成功。

也可以使用以下两条命令检测是否设置为了开机自启动

  • systemctl list-unit-files | grep enable,查看自启动的软件。
  • systemctl is-enabled mysqld.service,查看某个单元是否开机启动。

# 防火墙配置

  • 关闭防火墙,systemctl stop firewalld.service
  • 开放端口,firewall-cmd --zone=public --add-port=80/tcp --permanentfirewall-cmd --reload

# 目录相关

命令方式安装的情况下:

  • 执行目录:/usr/sbin/nginx
  • 模块所在目录:/usr/lib64/nginx/modules
  • 配置所在目录:/etc/nginx/
  • 默认站点目录:/usr/share/nginx/htm

# 配置文件及目录

命令方式安装的情况下:

  • /etc/nginx/nginx.conf 核心配置文件
  • /etc/nginx/conf.d/default.conf 默认http服务器配置文件
  • /etc/nginx/fastcgi_params fastcgi配置
  • /etc/nginx/scgi_params scgi配置
  • /etc/nginx/uwsgi_params uwsgi配置
  • /etc/nginx/koi-utf
  • /etc/nginx/koi-win
  • /etc/nginx/win-utf 这三个文件是编码映射文件,因为作者是俄国人
  • /etc/nginx/mime.types 设置HTTP协议的Content-Type与扩展名对应关系的文件
  • /usr/lib/systemd/system/nginx-debug.service
  • /usr/lib/systemd/system/nginx.service
  • /etc/sysconfig/nginx
  • /etc/sysconfig/nginx-debug 这四个文件是用来配置守护进程管理的
  • /etc/nginx/modules 基本共享库和内核模块
  • /usr/share/doc/nginx-1.18.0 帮助文档
  • /usr/share/doc/nginx-1.18.0/COPYRIGHT 版权声明
  • /usr/share/man/man8/nginx.8.gz 手册
  • /var/cache/nginx Nginx的缓存目录
  • /var/log/nginx Nginx的日志目录
  • /usr/sbin/nginx 可执行命令
  • /usr/sbin/nginx-debug 调试执行可执行命令

# 配置 Nginx 服务

$ sudo systemctl enable nginx # 设置开机启动 
$ sudo service nginx start # 启动 nginx 服务
$ sudo service nginx stop # 停止 nginx 服务
$ sudo service nginx restart # 重启 nginx 服务
$ sudo service nginx reload # 重新加载配置,一般是在修改过 nginx 配置文件时使用。
1
2
3
4
5

# 防火墙

# 测试访问

curl localhost

# 防火墙设置

开放端口

#开放80端口(nginx默认监听80端口)
firewall-cmd --add-port=80/tcp --permanent

#重载防火墙规则
firewall-cmd --reload
1
2
3
4
5

查看防火墙

systemctl status firewalld
1

关闭防火墙

systemctl stop firewalld.service
1

禁止防火墙开机启动

systemctl disable firewalld.service
1

启动Nginx并设置为开机启动

#启动服务
sudo systemctl start nginx
#(如果启动失败,可能是Apache等服务占用了80端口,关掉相应服务/修改端口即可)

#设置nginx开机启动
sudo systemctl enable nginx
1
2
3
4
5
6

# 检查命令

# 查看端口情况

netstat -antp | grep : # 查看所有端口
netstat -antp | grep :80 # 查看所有80端口

ps -ef | grep nginx # 查看服务进程
top
1
2
3
4
5

提示-bash: netstat: 未找到命令; 安装# yum -y install net-tools再次执行netstat -antp | grep :80

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      49436/nginx: master 
tcp        0      0 192.168.72.100:43272    202.232.140.10:80       TIME_WAIT   -                   
tcp        0      0 192.168.72.100:44148    150.65.7.130:80         TIME_WAIT   -                   
tcp        0      0 192.168.72.100:44760    103.48.119.119:80       TIME_WAIT   -                   
tcp        0      0 192.168.72.100:44402    45.120.52.95:80         TIME_WAIT   -                   
tcp        0      0 192.168.72.100:55758    134.160.38.1:80         TIME_WAIT   -                   
tcp        0      0 192.168.72.100:47554    14.17.102.85:80         TIME_WAIT   -                   
tcp        0      0 192.168.72.100:50954    103.233.192.20:80       TIME_WAIT   -                   
tcp        0      0 192.168.72.100:51502    109.224.14.75:80        TIME_WAIT   -                   
tcp6       0      0 :::80                   :::*                    LISTEN      49436/nginx: master 
1
2
3
4
5
6
7
8
9
10

# 查看进程状态

ps aux | grep nginx 或者 ps -ef | grep nginx

root      49525  0.0  0.1 105504  2128 ?        Ss   12:21   0:00 nginx: master process /usr/sbin/nginx
nginx     49526  0.0  0.1 105972  2924 ?        S    12:21   0:00 nginx: worker process
nginx     49527  0.0  0.1 105972  2924 ?        S    12:21   0:00 nginx: worker process
nginx     49528  0.0  0.1 105972  2924 ?        S    12:21   0:00 nginx: worker process
nginx     49529  0.0  0.1 105972  2924 ?        S    12:21   0:00 nginx: worker process
nginx     49530  0.0  0.1 105972  2924 ?        S    12:21   0:00 nginx: worker process
nginx     49531  0.0  0.1 105972  2924 ?        S    12:21   0:00 nginx: worker process
nginx     49532  0.0  0.1 105972  2924 ?        S    12:21   0:00 nginx: worker process
nginx     49533  0.0  0.1 105972  2924 ?        S    12:21   0:00 nginx: worker process
root      49535  0.0  0.0 112824   976 pts/0    S+   12:22   0:00 grep --color=auto nginx
1
2
3
4
5
6
7
8
9
10

# 查看日志

具体文件位置在nginx.conf配置

tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
 
tail -n 10 -f /var/log/nginx/access.log # 查看日志
1
2
3
4

# 查看安装文件

通过 rpm -ql nginx 可以查看 Nginx 安装的配置文件和目录。

# ubuntu系统下

# 安装

查看当前版本配置

可以通过 nginx -V 命令来查看版本以及支持的配置。

# 安装依赖库

# gcc g++
apt-get install build-essential
apt-get install libtool

# pcre
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install autoconf automake

# zlib
apt-get install zlib1g-dev

# ssl
apt-get install openssl
apt-get install libssl-dev
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 命令行方式

apt-get install nginx
1

# 源码包方式

nginx download (opens new window) 上找到最新的nginx 版本

# 下载
$ wget https://nginx.org/download/nginx-1.17.8.tar.gz
# 解压
$ tar -zxvf nginx-1.17.8.tar.gz
# 进入目录
$ cd nginx-1.17.8
# 配置,这里可能会报错,缺少啥就去安装啥
$ ./configure --prefix=/usr/local/nginx \
--with-http_gzip_static_module \
--with-http_v2_module \
--with-pcre \
--with-http_ssl_module

# 编译,这里可能会报错,缺少啥就去安装啥
$ make

# 安装
$ make install

# 通过软连接,这样就可以直接使用 nginx 执行
$ sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 卸载

# 移除 nginx
$ apt-get --purge remove nginx

# 查询 nginx 依赖的包,会列出来
$ dpkg --get-selections|grep nginx

# 移除上面列出的包,例如 nginx-common
$ apt-get --purge remove nginx-common

# 也可以执行 autoremove ,会自动删除不需要的包
$ apt-get autoremove

# 查询 nginx 相关的文件,删掉就可以了
$ sudo find / -name nginx*
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# Mac系统下

# 安装/卸载

brew install nginx
brew uninstall nginx

brew services start nginx #启动nginx服务
1
2
3
4

# 常用的命令

nginx  #启动nginx
nginx -s quit  #快速停止nginx
nginx -V #查看版本,以及配置文件地址
nginx -v #查看版本
nginx -s reload|reopen|stop|quit   #重新加载配置|重启|快速停止|安全关闭nginx
nginx -h #帮助
1
2
3
4
5
6
$ nginx -h #帮助
nginx version: nginx/1.10.1
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/local/Cellar/nginx/1.10.1/)
  -c filename   : set configuration file (default: /usr/local/etc/nginx/nginx.conf)
  -g directives : set global directives out of configuration file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# win系统下

# 安装

打开 Nginx 官网下载地址 (opens new window),点击 nginx / Windows-1.18.0 下载稳定版的 Nginx 。下载完成后,随便找个地方安装,安装完成后打开软件安装目录。Nginx 的主要配置文件都在 conf 文件夹中。

img

# 常用的命令

  • 启动Nginx start nginx
  • 停止Nginx nginx.exe -s quit
  • 重启Nginx nginx.exe -s reload
  • 检查Nginx配置是否正确 nginx -t

# 常用配置

# 相关目录及设置

  • 配置文件说明
1、全局配置文件:/etc/nginx/nginx.conf
2、默认配置文件:/etc/nginx/conf.d/default.conf
1
2
  • 新增配置目录
#1、新增配置文件夹
sudo mkdir /etc/nginx/server
#2、修改默认配置(加载该文件夹下的配置)
sudo vi /etc/nginx/nginx.conf
#3、在http属性下增加:
include /etc/nginx/server/*.conf;
1
2
3
4
5
6

# 配置

# 反向代理配置

#1、新建/修改配置文件
sudo vi /etc/nginx/server/default.conf

#2、配置示例
server {
    listen       80;        #监听80端口
    server_name  ken.io.local; #监听的域名
    location / {            #转发或处理
        proxy_pass https://ken.io;
    }
    error_page   500 502 503 504  /50x.html;#错误页
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 负载均衡配置

upstream serverswitch {
    server 127.0.0.1:80;
    server 127.0.0.1:81;
}
server {
    listen       80;        #监听80端口
    server_name   ken.io.local; #监听的域名
    location / {            #转发或处理
        proxy_pass https://serverswitch;
    }
    error_page   500 502 503 504  /50x.html;#错误页
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 相关问题

# 启动后报错

[root@f7b8638d673b app]# nginx -s reload
#####就是没有启动;编译时没有配置参数;
nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)
[root@f7b8638d673b app]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: [emerg] open() "/var/log/nginx/error.log" failed (2: No such file or directory)
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
[root@f7b8638d673b app]# 
1
2
3
4
5
6
7
8
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
1
2
3
4

解决:

Run the following installation command in Linux:

yum -y install pcre-devel
1

After the installation is complete, run your modified configuration information again

./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 \
--add-module=/usr/local/software/fastdfs/fastdfs-nginx-module-1.22/src
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 参考链接

https://www.cnblogs.com/piscesLoveCc/p/5867900.html

上次更新: 2022/04/15, 05:41:30
×