nginx 常用命令
nginx -s reload # 向主进程发送信号,重新加载配置文件,热重启
nginx -s reopen # 重启 Nginx
nginx -s stop # 快速关闭
nginx -s quit # 等待工作进程处理完成后关闭
nginx -T # 查看当前 Nginx 最终的配置
nginx -t -c <配置路径> # 检查配置是否有问题,如果已经在配置目录,则不需要-c
####################################################################
systemctl start nginx # 启动 Nginx
systemctl stop nginx # 停止 Nginx
systemctl restart nginx # 重启 Nginx
systemctl reload nginx # 重新加载 Nginx,用于修改配置后
systemctl enable nginx # 设置开机启动 Nginx
systemctl disable nginx # 关闭开机启动 Nginx
systemctl status nginx # 查看 Nginx 运行状态
nginx 配置文件
- 目录结构
main # 全局配置,对全局生效
├── events # 工作模式,配置影响 Nginx 服务器或与用户的网络连接
├── http # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
│ ├── upstream # 负载均衡服务器设置,配置后端服务器具体地址,负载均衡配置不可或缺的部分
│ ├── server # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
│ ├── server
│ │ ├── location # server 块可以包含多个 location 块,location 指令用于匹配 uri
│ │ ├── location
│ │ └── ...
│ └── ...
└── ...
- 典型配置
# 运行用户(启动者用户名),默认即是nginx,可以不进行设置
user nginx;
# Nginx 进程数,一般设置为和 CPU 核心数二倍
worker_processes 1;
# Nginx 的错误日志存放目录
error_log logs/error.log warn;
# Nginx 服务启动时的 pid 存放位置
pid logs/nginx.pid;
events {
# 工作模型:使用epoll的I/O模型(如果你不设置、不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
use epoll;
# 每个进程允许最大并发数(打开的文件数限制)
worker_connections 1024;
}
# 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http {
# 设置日志模式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# Nginx访问日志存放位置
access_log /var/log/nginx/access.log main;
# 开启高效传输模式
sendfile on;
# 减少网络报文段的数量
tcp_nopush on;
tcp_nodelay on;
# 保持连接的时间,也叫超时时间,单位秒
keepalive_timeout 65;
types_hash_max_size 2048;
# 文件扩展名与类型映射表
include /etc/nginx/mime.types;
# 默认文件类型
default_type application/octet-stream;
# 加载子配置项
include /etc/nginx/conf.d/*.conf;
# 配置后端服务器,进行负载均衡配置,可以多个upstream
upstrean houduan {
server 127.0.0.1:8080;
}
server {
# 配置监听的端口
listen 80;
# 配置的域名
server_name localhost;
location / {
# 网站根目录
root /usr/share/nginx/html;
# 默认首页文件
index index.html index.htm;
# 禁止访问的ip地址,可以为all
deny 172.168.22.11;
# 允许访问的ip地址,可以为all
allow 172.168.33.44;
# 请求的后端代理,实际地址位于upstream
proxy_pass http:houduan;
}
# 默认50x对应的访问页面
error_page 500 502 503 504 /50x.html;
# 同上
error_page 400 404 error.html;
}
}
nginx 代理和下·负载均衡
upstream 进行设置代理
upstrean houduan { # 配置后端服务器,进行正反向代理,可以多个upstream
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
负载均衡方式
1.默认:轮询
upstrean houduan {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
2.权重
upstrean houduan {
server 127.0.0.1:8080 wight=3;
server 127.0.0.1:8081 wight=1;
}
3.iphash
upstrean houduan {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
4.最小连接数
upstrean houduan {
least_conn;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
5.fair优先分配连接时间短的
upstrean houduan {
fair;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
nginx 限流
主流的限流算法:漏桶、令牌桶、计数器、滑动窗口
nginx 使用的限流算法:
令牌桶
令牌以固定的频率产生,并缓存到令牌桶中;
令牌桶满时,多余的令牌被丢弃;
请求要消耗等比例的令牌才能被处理;
令牌不够时,请求被缓存;
漏桶
请求被缓存到桶中,桶满时,请求会被丢弃;
匀速处理请求;
令牌桶与漏桶对比
令牌桶有一个缓存桶和一个队列(存放过多的请求);漏桶只有缓存桶,请求过多会被丢弃。
常用:
# 限制访问速率---漏桶--匀速处理
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /search/ {
limit_req zone=one;
}
}
## 设置桶大小
# 限制访问速率---漏桶--匀速处理
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /search/ {
limit_req zone=one burst=5; # 5表示0-5可以处理6个请求
}
}
## 设置桶大小+进缓存直接处理,不等待
# 限制访问速率---漏桶--匀速处理
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /search/ {
limit_req zone=one burst=5 nodelay; # 5表示0-5可以处理6个请求
}
}
## 设置桶大小+进缓存直接处理,不等待+给一个失败返回码
# 限制访问速率---漏桶--匀速处理
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /search/ {
limit_req zone=one burst=5 nodelay; # 5表示0-5可以处理6个请求
limit_req_status 598; # 警告请求的返回值限流了
}
}
ngnix 动静分离
= :进行普通字符精确匹配,也就是完全匹配。
^~ :表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。
~ :区分大小写的匹配。
~* :不区分大小写的匹配。
!~ :区分大小写的匹配取非。
!~* :不区分大小写的匹配取非
nginx 调优
# 运行用户(启动者用户名),默认即是nginx,可以不进行设置
user nginx;
# Nginx 进程数,一般设置为和 CPU 核心数二倍
worker_processes 1;
# Nginx 的错误日志存放目录
error_log logs/error.log warn;
# Nginx 服务启动时的 pid 存放位置
pid logs/nginx.pid;
events {
# 工作模型:使用epoll的I/O模型(如果你不设置、不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
use epoll;
# 每个进程允许最大并发数(打开的文件数限制)需要设置"ulimit -n 65536"
worker_connections 1024;
}
# 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http {
# 设置日志模式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# Nginx访问日志存放位置
access_log /var/log/nginx/access.log main;
# 开启高效传输模式
sendfile on;
# 减少网络报文段的数量
tcp_nopush on;
tcp_nodelay on;
# 保持连接的时间,也叫超时时间,单位秒
keepalive_timeout 65;
types_hash_max_size 2048;
# 文件扩展名与类型映射表
include /etc/nginx/mime.types;
# 默认文件类型
default_type application/octet-stream;
# 加载子配置项
include /etc/nginx/conf.d/*.conf;
# 配置后端服务器,进行负载均衡配置,可以多个upstream
upstrean houduan {
server 127.0.0.1:8080;
}
server {
# 配置监听的端口
listen 80;
# 配置的域名
server_name localhost;
location / {
# 网站根目录
root /usr/share/nginx/html;
# 默认首页文件
index index.html index.htm;
# 禁止访问的ip地址,可以为all
deny 172.168.22.11;
# 允许访问的ip地址,可以为all
allow 172.168.33.44;
# 请求的后端代理,实际地址位于upstream
proxy_pass http:houduan;
}
# 默认50x对应的访问页面
error_page 500 502 503 504 /50x.html;
# 同上
error_page 400 404 error.html;
}
}
nginx 将动态资源与静态资源请求分离
相关配置参数
# 启用缓存到本地的功能
proxy_store on;
# 用户读写权限
proxy_store_access user:rw group:rw all:rw
# 文件缓存路径,与url一致
proxy_temp_path 缓存目录;
# 本地缓存文件配置后,还需要以下配置才能避免请求去远端取文件
if( !e $request_filename ){ # 判断本地缓存是否存在该资源
proxy_pass http://ip; # 源服务器的地址,默认端口80,如果不是80需要指明
}
nginx 中具体配置
location ~*\.(gif|jpg|png|bmp|jpeg)$ { # 代理请求静态资源的正则匹配请求
# 浏览器缓存过期时间
expires 3d;
proxy_set_header Accept-Encoding '';
# 服务器的资源文件目录
root /home/images/nginx;
# 启用缓存到本地的功能
proxy_store on;
# 用户读写权限
proxy_store_access user:rw group:rw all:rw
# 文件缓存路径,与url一致
proxy_temp_path /home/images/nginx;
# 本地缓存文件配置后,还需要以下配置才能避免请求去远端取文件
if( !e $request_filename ){ # 判断本地缓存是否存在该资源
proxy_pass http://ip; # 源服务器的地址,默认端口80,如果不是80需要指明
}
}
nginx 热备
安装 keepalived
yum install nginx keepalived pcre-devel -y
vim keepalived.conf
配置 nginx 双活热备(同一网段)global_defs { vrrp_grap_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { #VI_1 vrrp实例组组名(master和slave保持一致) state MASTER # 备用机写BACKUP interface ens33 #网卡名称 virtual_router_id 50 #50:vrrp组的编号(master和slave保持一致) priority 100 # 参数 备用机设置为比主机低就可以 advert_int 1 authentication { auth_type PASS #授权类型(pass auth_pass 1111 #组密码(组件集群时,密码必须一致) } virtual_ipaddress { 虚拟一个同网段ip,如192.168.56.120 #VIP,虚拟的IP地址,需要与集群中的网段保持一致 } }
vim nginx.conf
# 配置服务器的热备 upstrean houduan { server 127.0.0.1:8080; server 127.0.0.1:8080 backup;# 8080宕机,该服务会充当主机 }
nginx 安全认证
htpasswd 生成密码文件
yum install httpd-tools -y
htpasswd 生成 nginx 密码文件(用户名不要使用 user_password)
htpasswd -bc /usr/local/nginx/nginx-1.18.0/conf/nginxpasswd test 123123
若要在已有 nginx 密码文件追加用户
htpasswd -b /usr/local/nginx/nginx-1.18.0/conf/nginxpasswd test1 123123
nginx 配置
location / { # 添加以下两行 auth_basic "Restricted"; auth_basic_user_file /usr/local/nginx/nginx-1.18.0/conf/nginxpasswd; }