# 安装Nginx yum install -y nginx # 堆代码 duidaima.com # 启动并设置开机自启 systemctl start nginx systemctl enable nginx # 验证服务状态 systemctl status nginx核心配置文件路径
日志目录:/var/log/nginx/(access.log 记录访问日志,error.log 记录错误日志)
server { listen 80; server_name example.com; # 你的域名或服务器IP # 日志配置 access_log /var/log/nginx/proxy_access.log main; error_log /var/log/nginx/proxy_error.log warn; # 反向代理核心配置 location / { proxy_pass http://192.168.1.100:8080; # 后端服务地址 proxy_set_header Host $host; # 传递客户端请求的Host头 proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链IP proxy_set_header X-Forwarded-Proto $scheme; # 传递请求协议(http/https) } }带缓存的反向代理(优化性能)
http { # 全局缓存配置(放在http块中) proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=PROXY_CACHE:10m max_size=10g inactive=7d use_temp_path=off; server { # ... 其他配置同上 ... location ~* \.(jpg|jpeg|png|gif|js|css)$ { # 匹配静态资源后缀 proxy_pass http://192.168.1.100:8080; proxy_cache PROXY_CACHE; # 启用缓存,关联上述keys_zone proxy_cache_valid 200 304 1d; # 200/304状态码缓存1天 proxy_cache_valid any 10m; # 其他状态码缓存10分钟 proxy_cache_key "$host$request_uri$is_args$args"; # 缓存键值(确保唯一性) add_header X-Cache-Status $upstream_cache_status; # 响应头显示缓存状态(HIT/MISS) } } }四.静态资源访问配置
server { listen 80; server_name example.com; # 你的域名或服务器IP # 日志配置(单独记录静态资源访问日志,便于分析) access_log /var/log/nginx/static_access.log main; error_log /var/log/nginx/static_error.log warn; # 静态资源核心配置:匹配 /static/ 路径的请求 location /static/ { # 指向服务器本地静态资源目录(末尾必须加 /,与 location 路径对应) root /data/; try_files $uri$uri/ /index.html; # 示例:访问 http://example.com/static/img/logo.png → 实际读取 /data/static/img/logo.png autoindex off; # 禁用目录索引(避免暴露目录结构) expires 1d; # 设置浏览器缓存时间(1天,减少重复请求) add_header Cache-Control "public, max-age=86400"; # 配合 expires 增强缓存策略 } # 可选:直接匹配文件后缀(覆盖未通过 /static/ 路径访问的静态资源) location ~* \.(jpg|jpeg|png|gif|bmp|svg|js|css|ico|woff|woff2|ttf|eot)$ { root /data/; expires 7d; # 字体、样式文件可设置更长缓存(7天) add_header Cache-Control "public, max-age=604800"; } }
备注:
1.root的作用是定义资源根目录,Nginx会将location匹配到的完整路径(包括location本身定义的路径),直接拼接在root指定的路径之后,形成最终的文件真实路径。
2.alias 的作用是为location路径设置别名,Nginx会将location匹配到的路径(即location定义的路径部分)直接替换为alias指定的路径,剩余的请求路径(若有)再拼接到alias路径后。
http { # 全局 Gzip 压缩配置 gzip on; # 启用 Gzip 压缩 gzip_min_length 1k; # 仅压缩大于 1KB 的文件(小文件压缩收益低) gzip_buffers 4 16k; # 压缩缓冲区大小 gzip_http_version 1.1; # 支持的 HTTP 版本 gzip_comp_level 6; # 压缩等级(1-9,等级越高压缩率越高但消耗 CPU 越多,推荐 6) gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss image/svg+xml; # 需压缩的文件类型 gzip_vary on; # 向客户端返回压缩标识(让浏览器知道资源已压缩) gzip_proxied any; # 对代理请求也启用压缩 # 其他配置(如反向代理、负载均衡等)... }静态资源防盗链配置
server { listen 80; server_name example.com; location /static/ { root /data/; expires 1d; # 防盗链核心配置:仅允许指定域名引用资源 valid_referers none blocked example.com *.example.com; # 允许的引用域名(none 表示直接访问,blocked 表示无 referer 的请求) if ($invalid_referer) { return 403; # 非法引用时返回 403 禁止访问 # 可选:返回自定义图片(如防盗链提示图),需将 return 403 替换为: # rewrite ^/ /static/img/anti-hotlink.png last; } } }五.限流配置
http { # 定义限流池:名为one,容量10,每秒放10个请求(rate=10r/s) limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; server { listen 80; server_name example.com; location / { # 应用限流池one,允许突发请求数为5(超过容量时排队) limit_req zone=one burst=5 nodelay; # 限流后返回的错误页面(可选) limit_req_status 503; proxy_pass http://192.168.1.100:8080; } } }连接数限流
http { # 定义连接数限流池:名为conn,容量20 limit_conn_zone $binary_remote_addr zone=conn:10m; server { # ... 其他配置 ... location / { limit_conn conn 20; # 单个IP最大连接数 limit_conn_per_ip 20; # 同limit_conn,部分版本支持 limit_req zone=one burst=5 nodelay; # 结合请求数限流 proxy_pass http://192.168.1.100:8080; } } }SSL 配置
server { listen 443 ssl http2; # 启用HTTPS和HTTP/2 server_name example.com; # SSL证书路径 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # SSL优化配置 ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全的TLS版本 ssl_prefer_server_ciphers on; # 优先使用服务器端加密套件 ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; # 安全加密套件 ssl_session_cache shared:SSL:10m; # SSL会话缓存 ssl_session_timeout 1d; # 会话超时时间 ssl_stapling on; # 启用OCSP stapling(减少证书验证时间) ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; # DNS解析器 # 强制HTTP跳转HTTPS(可选,单独配置一个80端口的server) server { listen 80; server_name example.com; return 301 https://$host$request_uri; # 永久重定向 } # 反向代理配置(同第二部分) location / { proxy_pass http://192.168.1.100:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }六.负载均衡配置
http { # 定义负载均衡池,名为backend upstream backend { # 后端服务器1,权重为2(权重越高,分配到的请求越多) server 192.168.1.100:8080 weight=2; # 后端服务器2,权重为1,max_fails=3表示3次连接失败标记为不可用 server 192.168.1.101:8080 weight=1 max_fails=3 fail_timeout=30s; # 后端服务器3,backup表示仅当其他节点不可用时才启用 server 192.168.1.102:8080 backup; } server { listen 80; server_name example.com; location / { # 转发请求至负载均衡池 proxy_pass http://backend; # 反向代理通用配置(同第二部分) proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } }