本文共 4314 字,大约阅读时间需要 14 分钟。
作为现代应用服务器中的领先选择,Nginx 在高性能、轻量级代理、负载均衡等方面具有卓越的优势。本文将深入探讨 Nginx 的核心配置与优化方法,帮助开发者充分发挥其潜力。
Nginx 不仅是一个 HTTP 反向代理服务器,更是一个通用协议代理解决方案,支持 TCP、UDP、SMTP、HTTPS 等多种协议。它基于多路复用模型(epoll),在理论上可支持数万级并发连接,实战中经过调优也能达到这一水平。
Nginx 的核心优势在于其高效的请求处理流程:
通过引入 Nginx,团队可以实现高可用、负载均衡、动静分离等功能,有效应对业务增长带来的性能挑战。
创建安装目录:
mkdir /soft/nginxcd /soft/nginx
下载安装包:
wget https://nginx.org/download/nginx-1.21.6.tar.gz
安装依赖库:
yum install gcc zlib openssl pcre pcre-devel
编译安装:
cd nginx-1.21.6./configure --prefix=/soft/nginxmake install
配置文件:
vi conf/nginx.conf
示例配置:
listen 80;server_name 192.168.0.1;root /soft/nginx/html;index index.html index.ftl;
启动服务:
sbin/nginx -c conf/nginx.conf
upstream nginx_boot { server 192.168.0.1:8080 weight=100 max_fails=2 fail_timeout=30s; server 192.168.0.2:8090 weight=200 max_fails=2 fail_timeout=30s;}server { listen 80; location / { proxy_pass http://nginx_boot; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }} 通过权重配置,请求会按 2:1 分配到 8080 和 8090。这意味着每个请求都会轮流打破重量平衡。
静态资源占用了后端服务器的大量请求,导致性能瓶颈。例如,淘宝首页可能有数百个静态资源请求。
创建静态资源目录:
mkdir /soft/nginx/static_resources
配置 Nginx:
location ~ .(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css) { root /soft/nginx/static_resources; expires 7d;}效果展示
静态资源通过 Nginx 直接服务,减少了后端负载,提升了性能表现。
Nginx 提供 ngx_http_gzip_module 等模块,支持动态资源压缩。
http { gzip on; gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png; gzip_comp_level 5; gzip_vary on; gzip_buffers 16 8k; gzip_disable "MSIE [1-6].";} 压缩后,静态资源文件大小大幅减少,带宽消耗降低。
proxy_buffering:默认启用。proxy_buffers:默认 4 4k/8k。proxy_temp_path:临时缓冲目录,防止内存不足。http { proxy_connect_timeout 10; proxy_read_timeout 120; proxy_send_timeout 10; proxy_buffering on; client_body_buffer_size 512k; proxy_buffers 4 64k; proxy_buffer_size 16k; proxy_busy_buffers_size 128k; proxy_temp_path /soft/nginx/temp_buffer;} proxy_cache_path:指定缓存目录和层次结构。proxy_cache:开启或关闭缓存。proxy_cache_valid:设置有效状态码和过期时间。proxy_cache_path /soft/nginx/cache levels=1:2 keys_zone=hot_cache:128m inactive=3d max_size=2g;server { location / { proxy_cache hot_cache; proxy_cache_valid 200 302 1d; proxy_cache_valid any 30m; proxy_cache_key $host$uri$is_args$args; proxy_cache_min_uses 3; proxy_cache_lock on; proxy_cache_lock_timeout 3s; proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; add_header Cache-status $upstream_cache_status; }} allow 127.0.0.1;deny all;include /soft/nginx/IP/BlocksIP.conf;
通过 allow 和 deny 指令,灵活控制访问权限。
location / { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS,PUT; add_header Access-Control-Allow-Headers *; add_header Access-Control-Expose-Headers Content-Length,Content-Range; if ($request_method == OPTIONS) { add_header Access-Control-Max-Age 1728000; return 204; }} 跨域问题需结合后端逻辑,通常通过 WebMvcConfigurer 实现接口间的跨域配置。
valid_referers blocked server_names string;location ~ .(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css) { valid_referers blocked 192.168.12.129; if ($invalid_referer) { rewrite ^/ https://example.com/NO.jpg; return 403; } root /soft/nginx/static_resources; expires 7d;} 通过 Referer 头部字段判断请求来源,防止外部网站盗用资源。
client_max_body_size 10m;client_header_timeout 10;proxy_read_timeout 120;proxy_send_timeout 10;
建议结合第三方模块 nginx-upload-module 实现大文件上传。
下载 CA 提交的证书文件:.crt, .key, .pem。
server { listen 443; server_name www.example.com; ssl on; ssl_certificate /soft/nginx/certificate/xxx.pem; ssl_certificate_key /soft/nginx/certificate/xxx.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_pre 转载地址:http://zmcfk.baihongyu.com/