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
2
3
4
5
6
7
8
9
10
11
安装gcc等编译环境
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
# 命令行方式
sudo yum -y install nginx # 安装 nginx
sudo yum remove nginx # 卸载 nginx
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
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
2
3
4
5
# 源码包方式
安装必要的库:
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
安装 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
$ sudo tar -zxvf nginx-1.18.0.tar.gz # 解压缩
在完成解压缩后,进入 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
如果前面的依赖库都安装成功后,执行 ./configure --prefix=/usr/local/nginx
命令会显示一些环境信息。如果出现错误,一般是依赖库没有安装完成,可按照错误提示信息进行所缺的依赖库安装。
表示成功:
进行源码编译并安装 nginx
$ make # 编译
$ make install # 安装
make && make install
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
2
3
4
5
添加到环境变量PATH
; 上面已经配置了全局的,这里不用再次设置;
echo $PATH
vim ~/.bash_profile
export PATH=$PATH:/usr/local/nginx/sbin
source ~/.bash_profile
2
3
4
5
6
- 启动服务
#/usr/local/nginx/sbin/nginx
nginx
2
- 重新加载服务
#/usr/local/nginx/sbin/nginx -s reload
nginx -s reload
2
- 停止服务
#/usr/local/nginx/sbin/nginx -s stop
nginx -s stop
2
查看 nginx 服务进程
ps -ef | grep nginx # 查看服务进程
# docker方式安装
# 简单方式
docker run --name nginx-test -p 18088:80 -d nginx``
配置挂载:
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
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
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;"]
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;'
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;"
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 .
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
2
3
4
5
6
7
# 配置启动
# 开机启动服务
非必须设置;
#vim /etc/systemd/system/nginx.service
vi /usr/lib/systemd/system/nginx.service
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
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 #取消开机自启动
2
3
4
5
杀死nginx重启nginx
pkill -9 nginx
ps aux | grep nginx
systemctl start nginx
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 停止开机自启动
2
3
4
5
6
7
设置服务启动脚本
非必须设置;
cp /usr/local/nginx/sbin/nginx /etc/init.d/nginx
service nginx start
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 --permanent
,firewall-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 配置文件时使用。
2
3
4
5
# 防火墙
# 测试访问
curl localhost
# 防火墙设置
开放端口
#开放80端口(nginx默认监听80端口)
firewall-cmd --add-port=80/tcp --permanent
#重载防火墙规则
firewall-cmd --reload
2
3
4
5
查看防火墙
systemctl status firewalld
关闭防火墙
systemctl stop firewalld.service
禁止防火墙开机启动
systemctl disable firewalld.service
启动Nginx并设置为开机启动
#启动服务
sudo systemctl start nginx
#(如果启动失败,可能是Apache等服务占用了80端口,关掉相应服务/修改端口即可)
#设置nginx开机启动
sudo systemctl enable nginx
2
3
4
5
6
# 检查命令
# 查看端口情况
netstat -antp | grep : # 查看所有端口
netstat -antp | grep :80 # 查看所有80端口
ps -ef | grep nginx # 查看服务进程
top
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
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
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 # 查看日志
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
2
3
4
5
6
7
8
9
10
11
12
13
14
# 命令行方式
apt-get install nginx
# 源码包方式
到 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
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*
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服务
2
3
4
# 常用的命令
nginx #启动nginx
nginx -s quit #快速停止nginx
nginx -V #查看版本,以及配置文件地址
nginx -v #查看版本
nginx -s reload|reopen|stop|quit #重新加载配置|重启|快速停止|安全关闭nginx
nginx -h #帮助
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
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 文件夹中。
# 常用的命令
- 启动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
2
- 新增配置目录
#1、新增配置文件夹
sudo mkdir /etc/nginx/server
#2、修改默认配置(加载该文件夹下的配置)
sudo vi /etc/nginx/nginx.conf
#3、在http属性下增加:
include /etc/nginx/server/*.conf;
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;
}
}
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;
}
}
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]#
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.
2
3
4
解决:
Run the following installation command in Linux:
yum -y install pcre-devel
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
2
3
4
5
6
7
8
9
10
11
12
13
14
# 参考链接
https://www.cnblogs.com/piscesLoveCc/p/5867900.html