常用NGINX配置命令
以下是Nginx配置文件nginx.conf的详细说明:
user nginx nginx;
指定Nginx的用户和组,Windows系统下无需指定。
worker_processes 8;
设置工作进程的数量,通常根据硬件配置调整,建议为CPU数量或其两倍。
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
定义错误日志的存放路径。
pid logs/nginx.pid;
指定pid(进程标识符)文件的存放路径。
worker_rlimit_nofile 204800;
设置进程可打开的最大文件描述符数量。
此指令定义Nginx进程所能打开的最大文件数,理论上应为每个进程的最大文件数(ulimit -n)与Nginx进程数的比例,但由于请求分配可能不均匀,建议与ulimit -n的值保持一致。
在Linux 2.6内核下,默认开启的文件打开数为65535,因此worker_rlimit_nofile应设置为65535。
如果设置为10240,当并发量达到3-4万时,可能会出现进程超过10240的情况,从而导致502错误。
events
{
use epoll;
Linux系统推荐使用epoll,FreeBSD系统则建议采用kqueue,Windows系统下无需指定。
Nginx根据不同操作系统提供了不同的事件模型:
A)标准事件模型
Select和poll属于标准事件模型,若当前系统没有更有效的方法,Nginx将选择这些。
B)高效事件模型
Kqueue:适用于FreeBSD 4.1+、OpenBSD 2.9+、NetBSD 2.0和MacOS X。使用双处理器的MacOS X系统在使用kqueue时可能导致内核崩溃。
Epoll:适用于Linux内核2.6及以上版本。
/dev/poll:适用于Solaris 7 11/99+、HP/UX 11.22+(eventport)、IRIX 6.5.15+和Tru64 UNIX 5.1A+。
Eventport:适用于Solaris 10。为了避免内核崩溃,有必要安装相关安全补丁。
worker_connections 204800;
每个工作进程最大连接数,建议根据硬件配置进行调整。理论上,Nginx服务器的最大连接数为worker_processes * worker_connections。
keepalive_timeout 60;
设置keepalive超时时间。
client_header_buffer_size 4k;
客户端请求头部的缓冲区大小。通常根据系统分页大小设置,一般请求头不会超过1k,但由于系统分页通常大于1k,因此可以设置为分页大小。
分页大小可以通过命令getconf PAGESIZE获取。
4096
虽然有时client_header_buffer_size可能超过4k,但该值必须为系统分页大小的整倍数。
open_file_cache max=65535 inactive=60s;
为打开的文件指定缓存,默认情况下未启用。max指定缓存的数量,建议与打开文件数一致,inactive表示文件在多长时间未被请求后删除缓存。
open_file_cache_valid 80s;
定义检查缓存有效信息的时间。
open_file_cache_min_uses 1;
在inactive时间内文件的最少使用次数,若超过该次数,文件描述符将保持在缓存中打开。如果文件在inactive时间内未被使用,将会被移除。
}
##配置HTTP服务器,利用反向代理功能提供负载均衡支持
http
{
include mime.types;
设定MIME类型,类型由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”;
log_format log404 $status [$time_local] $remote_addr $host$request_uri $sent_http_location;
access_log logs/host.access.log main;
access_log logs/host.access.404.log log404;
server_names_hash_bucket_size 128;
client_header_buffer_size 4k;
large_client_header_buffers 8 128k;
open_file_cache max=102400 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
client_max_body_size 300m;
sendfile on;
tcp_nopush on;
proxy_connect_timeout 90;
proxy_read_timeout 180;
proxy_send_timeout 180;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_temp_path /data0/proxy_temp_dir;
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
keepalive_timeout 120;
tcp_nodelay on;
client_body_buffer_size 512k;
proxy_intercept_errors on;
upstream bakend {
server 127.0.0.1:8027;
server 127.0.0.1:8028;
server 127.0.0.1:8029;
hash $request_uri;
}
server
{
listen 80;
server_name image.***.com;
location ~* .(mp3|exe)$ {
proxy_pass http://img_relay$request_uri;
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 /face {
if ($http_user_agent ~* “xnp”) {
rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
error_page 404 502 = @fetch;
}
location @fetch {
access_log /data/logs/face.log log404;
rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
location /image {
if ($http_user_agent ~* “xnp”) {
rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
error_page 404 502 = @fetch;
}
location @fetch {
access_log /data/logs/image.log log404;
rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
}
server
{
listen 80;
server_name *.***.com *.***.cn;
location ~* .(mp3|exe)$ {
proxy_pass http://img_relay$request_uri;
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 / {
if ($http_user_agent ~* “xnp”) {
rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
error_page 404 502 = @fetch;
}
location @fetch {
access_log /data/logs/baijiaqi.log log404;
rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect;
}
}
server
{
listen 80;
server_name *.***img.com;
location ~* .(mp3|exe)$ {
proxy_pass http://img_relay$request_uri;
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 / {
if ($http_user_agent ~* “xnp”) {
rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
error_page 404 = @fetch;
}
location @fetch {
access_log /data/logs/baijiaqi.log log404;
rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect;
}
}
server
{
listen 8080;
server_name ngx-ha.***img.com;
location / {
stub_status on;
access_log off;
}
}
server {
listen 80;
server_name imgsrc1.***.net;
root html;
}
server {
listen 80;
server_name ***.com w.***.com;
location / {
rewrite ^(.*)$ http://www.***.com;
}
}
server {
listen 80;
server_name *******.com w.*******.com;
location / {
rewrite ^(.*)$ http://www.*******.com;
}
}
server {
listen 80;
server_name ******.com;
location / {
rewrite ^(.*)$ http://www.******.com;
}
}
location /NginxStatus {
stub_status on;
access_log on;
auth_basic “NginxStatus”;
auth_basic_user_file conf/htpasswd;
}
location ~ /.ht {
deny all;
}
