实例分析:Nginx配置优化,提升性能与安全


nginx配置优化实例分析

[root@xxxxxxxxxxxxxx ~]# cat /usr/local/nginx/conf/nginx.conf
user nobody;

worker_processes 4;

worker_cpu_affinity 0001 0010 0100 1000;

error_log logs/error.log;

pid logs/nginx.pid;



events {
worker_connections 10240;

accept_mutex on;

multi_accept on;

use epoll;

}


http {
include mime.types;

default_type application/octet-stream;


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 logs/access.log main;


sendfile on;

tcp_nopush on;


keepalive_timeout 30;

keepalive_requests 50000;


send_timeout 15;


gzip on;

gzip_min_length 1024;

gzip_buffers 16 8k;

gzip_types text/plain application/x-javascript application/javascript application/json text/css application/xml image/jpeg image/gif image/png;

gzip_comp_level 6;

gzip_disable "
MSIE 6\."
;


proxy_cache_path /usr/local/nginx/nginx_cache/ levels=1:2 keys_zone=my_zone:10m inactive=300s max_size=5g;


include vhost/*.conf;

} upstream yyyyyyy.com {
server 127.0.0.1:8081 weight=1;

server 127.0.0.1:8082 weight=1;

}
server{
listen 443 ssl;

server_name www.yyyyyyy.com yyyyyyy.com;

ssl_certificate /usr/local/nginx/cert/yyyyyyy.com/2286250_yyyyyyy.com.pem;

ssl_certificate_key /usr/local/nginx/cert/yyyyyyy.com/2286250_yyyyyyy.com.key;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!eNULL;

ssl_prefer_server_ciphers on;


proxy_buffering on;

proxy_buffer_size 4k;

proxy_buffers 8 4k;

proxy_busy_buffers_size 16k;

proxy_temp_path /usr/local/nginx/proxy_temp 1 2;

proxy_max_temp_file_size 100M;

proxy_temp_file_write_size 16k;


location /{
root /usr/local/android/marketone;

index index.html index.htm;

error_page 500 502 503 504 /50x.html;

proxy_cache my_zone;

location = /50x.html {
root html;

}
}

location /api/upload/ {
proxy_pass http://127.0.0.1:8081/estrendMarket/upload/;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location /api/ {
proxy_pass http://xxxxxx.com/estrendMarket/;

index index.html index.htm;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

Nginx是一款高性能、高可靠性、轻量级的Web服务器和反向代理服务器,常用于负载均衡、反向代理、缓存等场景。但随着业务量增加和服务数量增多,Nginx的配置也会变得越来越复杂,影响性能和安全。如何优化Nginx配置,让其在高并发、大流量场景下更加稳定和高效呢?本文将从实例出发,为你提供一些优化Nginx配置的经验和技巧。
一、优化Nginx性能,提升用户体验
1. 调整worker_processes参数
worker_processes参数指定Nginx的工作进程数,数值越大表示可以同时处理的请求数越多,但同时也意味着资源的占用也会更多。可以通过top命令查看当前系统负载和CPU使用情况,合理配置worker_processes参数可以提高Nginx的性能和并发能力。通常建议配置的值为CPU核数的2倍左右。
2. 配置gzip和缓存
gzip可以对Nginx返回的数据进行压缩,减少传输时间和流量,建议在HTTP协议中开启gzip压缩,同时对静态资源进行缓存,把经常使用的静态文件放到内存中,如静态图片、CSS和JS等,可以减轻磁盘I/O负担,加速访问。
3. 使用Keep-Alive机制
Keep-Alive机制可以让一个TCP连接在一定时间内保持打开状态,服务器和浏览器之间的多次请求和响应可以通过这个连接复用,从而减少TCP连接的建立和关闭次数,提高访问速度和效率。可以通过在http{}代码块中加入以下代码来开启Keep-Alive机制。
http {
keepalive_timeout 65;
keepalive_requests 10000;
}
二、优化Nginx安全,保障数据安全和稳定性
1. 配置HTTPS
HTTPS可以让数据在传输过程中加密,防止数据被窃听和篡改,是保障数据安全的重要手段。可以通过申请SSL证书并配置在Nginx服务器上,启用HTTPS协议来加强安全性。通常还建议启用HSTS(HTTP Strict Transport Security)特性,告知浏览器只能使用HTTPS访问网站,防止中间人攻击。
2. 配置防火墙
Nginx本身并未提供太多的防火墙功能,但通过配置iptables、ufw等防火墙工具,可以通过限制IP访问、关闭非必要端口、限制连接数等方式加固Nginx的安全性。可以通过以下命令开启iptables防火墙:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -j DROP
3. 配置安全的密码和访问控制
Nginx可以通过配置用户名和密码进行基本的认证,限制未授权的用户访问,避免出现未经许可的访问和数据泄露。通常可以通过htpasswd来生成一个用户名和密码的文本文件,然后在Nginx配置文件中使用auth_basic和auth_basic_user_file指令来进行认证。也可以通过限制IP访问、限定访问时间等方式进行更细致的访问控制。
结语
本文对Nginx配置优化进行了实例分析,以提升性能和安全为核心,从多个方面给出了优化建议和技巧。无论是新手还是专业人士,在使用Nginx时都可以根据自己的需要和情况,灵活配置和优化Nginx,让其更加稳定、高效、安全。