基本命令
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”部分)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现。
配置大全
# 全局参数
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字段,表示客户端真实IPproxy_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=13.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负载均衡等各种配置,并且每个部分都有详细的注释。您可以根据具体需求进行修改和优化。