基本命令
shell
nginx -t 检查配置文件是否有语法错误
nginx -s reload 热加载,重新加载配置文件
nginx -s stop 快速关闭
nginx -s quit 等待工作进程处理完成后关闭
配置块介绍
全局块
全局块是默认配置文件从开始到events块之间的一部分内容,主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是Nginx服务器全局。
通常包括配置运行Nginx服务器的用户(组)、允许生成的worker process数、Nginx进程PID存放路径、日志的存放路径和类型以及配置文件引入等。
exents
events块涉及的指令主要影响Nginx服务器与用户的网络连接。常用到的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型处理连接请求,每个worker process可以同时支持的最大连接数等。
http
http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这个模块中。
前面已经提到,http块中可以包含自己的全局块,也可以包含server块,server块中又可以进一步包含location块,在本书中我们使用"http全局块"来表示http中自己的全局块,即http块中不包含在server块中的部分。
可以在http全局块中配置的指令包括文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。
server
server块和"虚拟主机"的概念有密切联系。
虚拟主机,又称虚拟服务器、主机空间或是网页空间,它是一种技术。该技术是为了节省互联网服务器硬件成本而出现的。这里的"主机"或"空间"是由实体的服务器延伸而来,硬件系统可以基于服务器群,或者单个服务器等。虚拟主机技术主要应用于HTTP、FTP及EMAIL等多项服务,将一台服务器的某项或者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件资源。从用户角度来看,一台虚拟主机和一台独立的硬件主机是完全一样的。
在使用Nginx服务器提供Web服务时,利用虚拟主机的技术就可以避免为每一个要运行的网站提供单独的Nginx服务器,也无需为每个网站对应运行一组Nginx进程。虚拟主机技术使得Nginx服务器可以在同一台服务器上只运行一组Nginx进程,就可以运行多个网站。
在前面提到过,每一个http块都可以包含多个server块,而每个server块就相当于一台虚拟主机,它内部可有多台主机联合提供服务,一起对外提供在逻辑上关系密切的一组服务(或网站)。
和http块相同,server块也可以包含自己的全局块,同时可以包含多个location块。在server全局块中,最常见的两个配置项是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。
location
每个server块中可以包含多个location块。在整个Nginx配置文档中起着重要的作用,而且Nginx服务器在许多功能上的灵活性往往在location指令的配置中体现出来。
location块的主要作用是,基于Nginx服务器接收到的请求字符串(例如, server_name/uri-string),对除虚拟主机名称(也可以是IP别名)之外的字符串(前例中"/uri-string"部分)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现。
配置大全
nginx
# 全局参数
user nginx; # Nginx进程运行用户
worker_processes auto; # Nginx工作进程数,通常设置为CPU核数
error_log /var/log/nginx/error.log warn; # 错误日志路径和日志级别
pid /run/nginx.pid; # 进程PID保存路径
# 定义事件模块
events {
worker_connections 1024; # 每个工作进程最大并发连接数
use epoll; # 使用epoll网络模型,提高性能
multi_accept on; # 开启支持多个连接同时建立
}
# 定义HTTP服务器模块
http {
# 缓存文件目录
client_body_temp_path /var/cache/nginx/client_temp;
proxy_temp_path /var/cache/nginx/proxy_temp;
fastcgi_temp_path /var/cache/nginx/fastcgi_temp;
# 定义日志格式,main是默认的日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 默认访问日志保存路径和格式
access_log /var/log/nginx/access.log main;
# 定义MIME类型
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 代理参数
proxy_connect_timeout 6s; # 连接超时时间
proxy_send_timeout 10s; # 发送超时时间
proxy_read_timeout 10s; # 接收超时时间
proxy_buffer_size 16k; # 缓冲区大小
proxy_buffers 4 32k; # 缓冲区个数和大小
proxy_busy_buffers_size 64k; # 忙碌缓冲区大小
proxy_temp_file_write_size 64k; # 代理临时文件写入大小
# 启用压缩,可以提高网站访问速度
gzip on;
gzip_min_length 1k; # 最小压缩文件大小
gzip_types text/plain text/css application/json application/javascript application/xml;
# 定义HTTP服务器
server {
listen 80; # 监听端口
server_name example.com; # 域名
# 重定向到HTTPS,强制使用HTTPS访问
if ($scheme != "https") {
return 301 https://$server_name$request_uri;
}
# HTTPS服务器配置
ssl_certificate /etc/nginx/ssl/server.crt; # SSL证书路径
ssl_certificate_key /etc/nginx/ssl/server.key; # SSL私钥路径
# SSL会话缓存参数
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
#代理缓存路径
proxy_cache_path /tmp/nginxCache levels-1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
# 配置代理路径
location / {
proxy_pass http://localhost:8080; # 转发请求的目标地址
proxy_set_header Host $host; # 设置请求头中的Host字段
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 设置HTTP头中的X-Forwarded-For字段,表示客户端真实IP,多个IP用逗号隔开
proxy_set_header X-Real-IP $remote_addr; # 设置请求头中的X-Real-IP字段,表示客户端真实IP
proxy_cache my_cache; #指定代理缓存名
proxy_cache_key $host$url$is_args$args;#设计的key格式
proxy_cache_valid 200 301 302 ld;#只有这些状态码才缓存
}
# 配置静态文件访问路径
location /static/ {
alias /path/to/static/files/; # 静态文件的目录
expires 7d; # 静态文件缓存时间
add_header Pragma public; # 添加HTTP响应头
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
# 配置错误页面
error_page 404 /404.html; # 404错误页
location = /404.html {
internal; # 不接受外部访问
root /usr/share/nginx/html; # 404错误页文件所在目录
}
# 配置重定向
location /old/ {
rewrite ^/old/([^/]+) /new/$1 permanent; # 将/old/xxx路径重定向为/new/xxx,返回301状态码
}
}
# 其他服务配置
# server {
# ...
# }
}
/*
# 配置http负载均衡
upstream backends {
server backend1.example.com:8080 weight=5; # 后端服务器地址和权重
server backend2.example.com:8080;
server backend3.example.com:8080 backup; # 备用服务器
keepalive 16; # 连接池大小
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backends; # 负载均衡转发请求的目标地址
proxy_set_header Host $host; # 设置请求头中的Host字段
proxy_set_header X-Real-IP $remote_addr; # 设置请求头中的X-Real-IP字段,表示客户端真实IP
}
}
*/
#配置tcp,udp代理
stream {
upstream kevin {
/*
负载均衡的策略:
1.默认轮询
2.加权轮询 weight=1
3.ip哈希(开启缓存后,能利用缓存,交给同一服务器处理):ip_hash;
4.一致性哈希:当一个节点宕机后,将原本这个节点的客户端转交给下一个服务器 hash $url consistent;
*/
# 权重 超时次数 超时时间
server 127.0.0.1:8001 weight=1 max_fails=3 fail_timeout=30s; #这里配置成要访问的地址
#server 192.168.10.20:8082;
server 127.0.0.1:8002 weight=1 max_fails=3 fail_timeout=30s; #需要代理的端口,在这里我代理一一个kevin模块的接口8081
}
# 配置TCP代理
server {
proxy_connect_timeout 1s;#连接超时时间
listen 8000; #需要监听的端口
proxy_timeout 3600s;#默认为10分钟,
proxy_pass kevin;
tcp_nodelay on;
}
# 配置UDP代理
server {
listen 8888 udp;
proxy_pass backend_udp_server:8888;
}
}
这个配置文件包含了全局参数、事件模块、HTTP服务器、服务定义、静态文件访问路径、错误页面、重定向、TCP负载均衡等各种配置,并且每个部分都有详细的注释。您可以根据具体需求进行修改和优化。