VPN技术 · 2023年11月10日 0

常用NGINX配置命令

常用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;

}