一 、配置详解
1.1nginx配置文件
#nginx 已那个用户身份访问文件
user www;
#指定nginx使用的worker进程数
worker_processes 8;
#worker_cpu_affinity是一个用于配置工作进程CPU亲和性的选项。
#CPU亲和性是指将进程或线程绑定到特定的CPU核心上,以提高性能和效率。
#通常cpu几核,就配置几个
worker_cpu_affinity 0000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000;
#PID配置项是用于指定保存主进程ID的文件路径
pid /var/run/nginx.pid;
#用于限制每个worker进程可以打开的最大文件描述符数量。
#ulimit -n 查看系统文件句柄数 设置为系统允许的最大文件句柄数的 80% - 90%
worker_rlimit_nofile 65535;
#用于控制Nginx服务器的事件模型和并发处理方式。
events {
#用于设置每个worker进程的最大并发连接数 即每个worker进程可以同时处理的最大客户端连接数
worker_connections 1024;
#常见的事件模型包括epoll、kqueue和select等。
use epoll;
#用于指定是否允许一个worker进程同时接受多个新连接
multi_accept on;
}
#用于代理TCP和UDP流量,允许将Nginx作为代理服务器来处理网络流量
#使用stream模块可以使Nginx具备代理TCP和UDP流量的能力
stream {
include /etc/nginx/stream/*.conf;
}
#此模块用于配置HTTP服务器,允许主机作为Web服务器来处理HTTP请求
http {
#引入mime头文件 定义了Nginx的mime类型
include mime.types;
#指令用于设置在请求无法匹配到任何MIME类型时的默认类型
default_type application/octet-stream;
#定义日志格式 main 为日志格式 名称
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#定义访问日志路径 main 指用那个日志格式名称
access_log /var/log/nginx/access.log main;
# 当将sendfile设置为on时,Nginx使用sendfile()系统调用来直接将文件从磁盘传输到网络,
# 而无需将文件数据复制到用户空间。这样可以显着提高文件传输速度和效率。
sendfile on;
#将tcp_nopush设置为on时,Nginx会禁用TCP_CORK
#允许在nginx worker进程发送数据时立即将响应发送到客户端,而无需等待TCP缓冲区填满。
#将tcp_nopush设置为on可以提高响应的实时性,允许立即发送数据到客户端
tcp_nopush on;
#将tcp_nodelay设置为on时,Nginx会打开TCP_NODELAY,这将禁用TCP的Nagle算法,
#以便在发送小数据包或有延迟要求的数据时能够及时发送数据。
#将tcp_nodelay设置为on可以减少TCP延迟,适用于实时性要求高的应用场景。
tcp_nodelay on;
#隐藏Nginx版本号
server_tokens off;
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
#配置空主机头 404 就是禁用http通过ip访问
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 443 ssl default_server;
server_name _;
ssl on;
return 444;
}
include /etc/nginx/conf.d/*.conf;
}
1.2log_format可用变量
$remote_addr:客户端的IP地址。
$remote_user:客户端的用户名称(如果有授权)。
$time_local:访问时间和日期(格式:[day/month/year:hour:minute:second zone])。
$request_method:HTTP请求的方法(例如GET或POST)。
$request_uri:完整的请求URI。
$request_length:请求的长度(包括请求行,请求头和请求体)。
$status:HTTP响应的状态码。
$body_bytes_sent:发送给客户端的响应体的字节数。
$http_referer:请求中的“Referer”头部字段,包含了前一个页面的URL。
$http_user_agent:请求的用户代理头部字段,表示发起请求的客户端工具或库。
1.3host配置文件
upstream 模块
#定义负载均衡
#放置在 http 或 server 块
upstream name {
#用于指定上游服务器的地址和端口。可以指定多个server来定义多个上游服务器。
server backend1.example.com;
#max_fails 和 fail_timeout:用于设置上游服务器的故障处理策略
#max_fails 指定在多少次失败请求后将服务器标记为不可用
#fail_timeout 指定在服务器被标记为不可用后,多长时间内不再尝试请求。
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
#设置与上游服务器的连接保持活动的时间。可以提高性能并减少连接建立的开销。
keepalive:32;
}
#weight:用于设置服务器的权重。权重越高,Nginx 转发给该服务器的请求越多。
#示例:
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=2;
}
#ip_hash:使用客户端的IP地址进行负载均衡,使得来自同一IP地址的请求始终被转发到同一台上游服务器。
#示例:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
Server模块
server:定义一个虚拟主机
server{
listen:指定服务器监听的端口
server_name:配置域名或IP地址
root:指定网站文件的根目录
index:定义当访问网站时默认显示的文件
location:定义请求的URL匹配规则和对应的处理方法。
proxy_pass:用于反向代理服务器的配置。
ssl_certificate和ssl_certificate_key:配置SSL/TLS证书。
try_files:定义文件检查规则
gzip on; 将 Gzip 压缩功能开启。
将所有类型的文件都进行 Gzip 压缩。这意味着无论是文本文件、图像文件还是视频文件,
都将进行压缩传输。如果你希望只压缩特定类型的文件,可以指定具体的文件类型,
例如 gzip_types text/plain text/css application/javascript;。
gzip_types *;
(gzip_proxied on or gzip_proxied off or gzip_proxied expired no-cache no-store private auth) 指定需要压缩的响应类型,
并且设置允许或者不允许使用代理服务器进行压缩。any 表示无论何时都进行压缩。
gzip_proxied any;
}
二、常用示例
2.1 mysql 代理示例
stream {
server {
listen 63306;
proxy_connect_timeout 8s;
proxy_timeout 24h;
proxy_pass 192.168.0.108:3306;
}
}
2.3 带upstream的写法
upstream rd_servers {
server 127.0.0.1:5000;
}
server{
server_tokens off;
listen 80;
server_name redash.xxxxx.com;
access_log /var/log/nginx/rd.access.log;
gzip on;
gzip_types *;
gzip_proxied any;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://rd_servers;
}
}