一、安装及使用Nginx
1.编译安装nginx
bash
【编译安装 Nginx 服务】
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
1、安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
2、创建运行用户
useradd -M -s /sbin/nologin nginx
3、编译安装
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make && make install
4、优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
5、使用systemd 进行管理 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#各行含义:
[Unit] ##服务说明
Description=nginx ##描述服务
After=network.target ##依赖,当依赖的服务启动的时候再启动自定义的服务
[Service] ##服务运行参数的设置
Type=forking ##表示后台运行,使用启动类型应该同事指定PIDFile=,这样便于systemd能够追踪
PIDFile=/usr/local/nginx/logs/nginx.pid ##指定pid的文件
ExecStart=/usr/local/nginx/sbin/nginx ##服务启动的命令,就是绝对路径启动的命令
ExecReload=/bin/kill -s HUP $MAINPID ##加载
ExecStop=/bin/kill -s QUIT $MAINPID ##关闭
PrivateTmp=true ##表示给服务分配独立的临时空间
[Install]
WantedBy=multi-user.target ##服务安装的相关设置,可设置多用户
chmod 754 /lib/systemd/system/nginx.service
systemctl daemon-reload
#重新加载配置
systemctl start nginx.service
systemctl enable nginx.service
#主配置文件路径在/usr/local/nginx/conf
2.nginx验证命令和发送信号
bash
# 测试配置文件语法
nginx -t
# 测试配置文件语法并打印所有配置
nginx -T
USR1: USR1
信号用于重新打开 Nginx 的日志文件。这在你想要对日志文件进行轮转(如每天生成一个新的日志文件)时很有用。发送这个信号告诉 Nginx 切换到新的日志文件,继续记录日志,而不必重启 Nginx 服务。
USR2飞行中升级: (又称热升级或无中断升级)是指在不中断服务的情况下,对服务器软件进行升级。这种技术在需要高可用性和最小停机时间的生产环境中尤为重要。在 Nginx 中,飞行中升级允许你升级 Nginx 软件版本或重新加载配置文件,而不影响正在进行的客户端连接。
飞行中升级作用:
1.最小化停机时间
2.无缝发布新功能
3.提高系统可靠性
4.简化维护操作
5.降低用户影响
二、nginx配置详细解释
nginx 官方帮助文档:http://nginx.org/en/docs/
Nginx的配置文件的组成部分:
主配置文件:nginx.conf
子配置文件: include conf.d/*.conf
1.nginx调优
2.http设置
http 是一个大的语句块,包含若干个小的语句块(比如server语句块)
bash
http {
include /etc/nginx/mime.types;
#include 指令用于将其他文件或目录中的配置内容包含到当前位置。
...
... #各server的公共配置
server { #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
...
}
server {
...
server_name #虚拟主机名
root #主目录
#sever 下的 root指定了主页文件的位置
alias #路径别名
location [OPERATOR] URL { #指定URL的特性
...
if CONDITION {
...
}
}
}
}
3.server块构建虚拟主机 实际只有1台, 好像有多台主机
建立独立的配置文件(方便管理) 构建不同虚拟主机 PC端和手机端
bash
vim /usr/local/nginx/conf/nginx.conf
#修改配置文件 要放在 http 模块里
include /etc/nginx/mime.types;
include /usr/local/nginx/conf.d/*.conf;
mkdir -p /usr/local/nginx/conf.d/
#建立子配置文件
cd /usr/local/nginx/conf.d/
vim pc.conf
#分别编写配置文件
#以下是基于端口号,基于ip地址和基于域名与httpd服务类似
server {
listen 80;
server_name localhost;
root /data/nginx/html/pc/;
}
#也可以使用location 模块
server{
listen 192.168.133.10:80;
server_name www.pc.com;
location / {
root /data/nginx/html/pc;
}
}
vim mobile.conf
#分别编写配置文件
server {
listen 192.168.133.10:9527;
server_name m.kgc.com;
root /data/nginx/html/mobile/;
}
mkdir /data/nginx/html/pc -pv
mkdir /data/nginx/html/mobile -pv
#构建数据文件夹
echo pc > /data/nginx/html/pc/index.html
echo moblie > /data/nginx/html/mobile/index.html
#构建数据文件
curl 192.168.133.10:9527
moblie
curl 192.168.133.10
pc
4.alias 别名
location 和 alias本质区别:
localtion 相当于追加
alias相当于替换
例:
bash
server {
listen 80;
server_name www.pc.com;
location /nwes {
root /data/nginx/html/pc/;
#相当于追加 将 文件夹news追加到/data/nginx/html/pc/news
}
location /study{
alias /mnt/nginx/sports/;
#相当于替换 你访问 study 就是访问/mnt/nginx/sports
}
}
5.location匹配
在一个server中location配置段可存在多个,location 是 Nginx 配置文件中的一个指令,用于定义请求的匹配规则和对应的处理方式。它允许你根据请求的 URI 或其他条件来指定不同的处理逻辑。
语法规则:
bash
#语法规则:
location [ = | ~ | ~* | ^~ ] uri { ... }
= #用于标准url前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~ #用于标准url前,表示使用正则表达式,并且匹配以指定的正则表达式开头,对URI的最左边部分做匹配检查,不区分字符大小写
~ #用于标准url前,表示使用正则表达式,并且区分大小写
~* #用于标准url前,表示使用正则表达式,并且不区分大写
不带符号 #匹配起始于此uri的所有的uri
#\ #用于标准url前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号
匹配优先级从高到低:
=, ^~, ~/~*, 不带符号