Nginx配置文件详解

Nginx配置文件详解

 

1、主配置文件大致结构:
Nginx配置文件(/usr/local/nginx/conf/nginx.conf)
[root@nginx-4 nginx]# vim /usr/local/nginx/conf/nginx.conf ## 主要结构如下图

配置 文件主要由四部分组成:
main(全区设置),HTTP(设置负载均衡服务器组),
server(虚拟主机配置),和location(URL匹配特定位置设置)。

 

 

访问一个web 页面,发起N个HTTP请求

产生一次TCP连接 ,完成多个 HTTP 请求


2、简易示例 :

user nginx nginx;
worker_processes 1;
events {
worker_connections 1024;
use epoll;
}

http{
include mime.types;
charset utf-8;
keepalive_timeout 65;
server {
ServerName N1
location{ }
location{ }
}
server {
ServerName N2
location{ }
location{ }
}
server {
ServerName N3
location{ }
location{ }
}
}

 

3、主配置文件解析:

1)全局变量 部分:

#user nobody nobody; #Nginx的worker进程运行用户以及用户组
worker_processes 1; #Nginx开启的进程数,建议设置为等于CPU总核心数。
#worker_processes auto; ## 多核心CPU设置。
## [root@server-21 ~]# cat /proc/cpuinfo 查看当前CPU 的信息。
#worker_processes 4 # 4核CPU
#worker_cpu_affinity 0001 0010 0100 1000;

#亲核
##CPU亲核,设置工作进程与 CPU 绑定。
#指定了哪个cpu分配给哪个进程,一般来说不用特殊指定。如果一定要设的话,用0和1指定分配方式.
#这样设就是给1-4个进程分配单独的核来运行,出现第5个进程是就是随机分配了。

#error_log logs/error.log info; #定义全局错误日志定义类型,[debug|info|notice|warn|crit]
#pid logs/nginx.pid; #指定进程ID存储文件位置

worker_rlimit_nofile 65535;

#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,
但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。

ulimit -a 查看所有 ulimit -n 查看 最大文件数量 ulimit -u 查看最大进程数量
每个用户打开的 文件数量 nofile 打开的进程数量 nprco

#vim /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535

注意:设置了这个后,修改worker_connections值时,是不能超过worker_rlimit_nofile的这个值。

修改后,不需要重启, 退出当前会话,重新 登录即可读取新的配置值


2)事件驱动模型配置 部分:

events {

use epoll; #use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; ## epoll模型是 Linux 2.6以上版本内核中的高性能网络I/O模型,
如果跑在 FreeBSD 上面,就用kqueue模型。

worker_connections 65535; #每个进程可以处理的最大连接数,理论上每台nginx服务器的最大连接数为
worker_processes X worker_connections。
理论值:worker_rlimit_nofile / worker_processes
#注意:最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处

}

 

很多人会误解 worker_connections 这个参数的意思,认为这个值就是nginx所能建立连接的最大值。
其实不然,这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个nginx能建立的最大连接数,应该是worker_connections X worker_processes。

当然,这里说的是最大连接数,对于HTTP请求本地资源来说,能够支持的最大并发数量是worker_connections * worker_processes


而如果是HTTP作为反向代理来说,最大并发数量应该是 worker_connections X worker_processes /2。
因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。


3)设定 http 的部分:

http {

include /etc/nginx/mime.types; #文件扩展名与文件类型映射表,设定mime类型,类型由mime.type文件定义

default_type application/octet-stream; #默认文件类型

#charset utf-8; #服务器 默认编码
#include /etc/nginx/proxy.conf; #反向代理配置,可以打开proxy.conf看看
#include /etc/nginx/fastcgi.conf; #fastcgi配置,可以打开fastcgi.conf看看

#生成日志的格式定义
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

#定义日志的格式。后面定义要输出的内容。
#1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
#2.$remote_user 用来记录客户端用户名称;
#3.$time_local 用来记录访问时间与时区;
#4.$request 用来记录请求的url与http协议;
#5.$status 用来记录请求状态;
#6.$body_bytes_sent 记录发送给客户端文件主体内容大小;
#7.$http_referer 用来记录从那个页面链接访问过来的;
#8.$http_user_agent 记录客户端浏览器的相关信息

#访问日志
access_log /var/log/nginx/access.log main;

sendfile on; # sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
# 必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
# sendfile: 设置为on表示启动高效传输文件的模式。
#sendfile可以让Nginx在传输文件时直接在磁盘和tcp socket之间传输数据。
#如果这个参数不开启,会先在用户空间(Nginx进程空间)申请一个buffer,用read函数把数据从磁盘读到内核cache,
#再从内核 cache读取到用户空间nginx 的buffer,再用write函数把数据从用户空间的buffer写入到内核的buffer,最后到tcp socket。
#开启这个参数后可以让数据不用经过用户buffer。
#可加速web服务器在传输文件方面的效率。

#autoindex on; #开启目录列表访问(网站以树目录展示),合适下载服务器,默认关闭。
#tcp_nopush on; #tcp_nopush:在linux的实现里,其实就是tcp_cork 。
#tcp_nodelay 最多不过是在等等,看能不能再搞点数据,如果实在是没数据了,小包它也发(200ms)。
#而这个tcp_cork直接就禁止了小包的发送。
#也就是说,如果你开着这个选项,你的nginx发送的包都是满的。
#包都是满的,那ACK就少,网络利用率就起来了
#默认 :off

keepalive_timeout 65; #连接超时时间,单位是秒
tcp_nodelay on; #启动TCP_NODELAY,就意味着禁用了 Nagle 算法,允许小包的发送。可降低延迟,但是会增加网络的负担
#关闭TCP_NODELAY,则是应用了 Nagle 算法。 数据只有在写缓存中累积到一定量之后,
#才会被发送出去,这样明显提高了 网络利用率(实际传输数据payload与协议头的比例大大提高)。
#但是这由不可避免地增加了延时。
#默认: on

#server_names_hash_bucket_size 128; #服务器名字的hash表大小
#client_header_buffer_size 32k; #客户端请求头部的缓冲区大小,一般一个请求的头部大小不会超过1k

#large_client_header_buffers 4 64k; #header过大,它会使用large_client_header_buffers来读取
#client_max_body_size 8m; #接收 客户端 主体 的最大体积,可以限制用户上传单个文件的大小。

#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。
#fastcgi_connect_timeout 300;
#fastcgi_send_timeout 300;
#fastcgi_read_timeout 300;
#fastcgi_buffer_size 64k;
#fastcgi_buffers 4 64k;
#fastcgi_busy_buffers_size 128k;
#fastcgi_temp_file_write_size 128k;

 


4)gzip模块设置 :

#gzip on; #开启gzip压缩输出
#gzip_min_length 1k; #最小压缩文件大小
#gzip_buffers 4 16k; #压缩缓冲区
#gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
#gzip_comp_level 2; #压缩等级
#gzip_types text/plain application/x-javascript text/css application/xml;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
#gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用

include /etc/nginx/conf.d/*.conf; #附加配置文件
#include /etc/nginx/sites-enabled/*;

 

 


5)设定负载均衡的服务器列表 :(nginx 作为web 代理角色 )--------------------------------------------

#upstream tomcat1 {
# #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
# server 127.0.0.1:8080 weight=1;
# server 192.168.1.116:8081 weight=1;
#}

#设定负载均衡的服务器列表,可以配置多个负载均衡的服务器列表
#upstream tomcat2 {
# #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
# server 127.0.0.1:8080 weight=1;
# server 192.168.1.11:8081 weight=1;
#}

 

 

 



6)虚拟主机的配置 :--------------------------------------------

server {

listen 80; #监听端口
server_name 192.168.1.11; #域名可以有多个,用空格隔开, 多个虚拟主机主要依靠这一选项来区分,重要!

index index.html index.htm index.jsp; #定义索引首页

root /home/public; #定义站点根目录

error_page 400 402 403 404 405 406 410 411 413 416 500 501 502 503 504 /error.html; #定义错误页面
error_page 505 /error.html;


#log_format access '$remote_addr - $remote_user [$time_local] "$request" ' #日志格式设定
#'$status $body_bytes_sent "$http_referer" '
#'"$http_user_agent" $http_x_forwarded_for';

#access_log /var/log/nginx/access.log access; #定义本虚拟主机的访问日志

############## 使用 location 标签对 URI 进行 控制 #####################

location / {
expires 2m;
add_header Cache-Control “public, must-revalidate, proxy-revalidate”; #添加自定义首部
add_header Cache-Control “public, must-revalidate, proxy-revalidate”;
}

location ~ /rest/(api|images|files)/ { #所有的rest请求都是以api开头的
proxy_pass http://localhost:8080;
proxy_next_upstream error timeout;
proxy_connect_timeout 8s;
proxy_intercept_errors on;
proxy_set_header X-Forwarded-Host httphost;
proxysetheaderX−Forwarded−Serverhost;
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
proxy_set_header X-Real-IPremote_addr;
proxy_set_header Host $http_host;
}

#location / { #默认请求 #对 “/” 启用反向代理
#proxy_pass localhost;
#proxy_redirect off;

#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

#proxy_set_header Host $host; #以下是一些反向代理的配置,可选。
#client_max_body_size 10m; #允许客户端请求的最大单文件字节数
#client_body_buffer_size 128; #缓冲区代理缓冲用户端请求的最大字节数
#proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
#proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
#proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
#proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
#proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
#proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
#proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
#}


#location ~ ^/(images|javascript|js|css|flash|media|static)/ { #以下为设置静态资源,nginx自己处理
# root /home;
# expires 30d; #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
#}


#location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ { #图片缓存时间设置
# expires 30d;
#}

#location ~ .*.(js|css)?$ { #JS和CSS缓存时间设置
# expires 30h;
#}

#location ~ .(jsp|jspx|do)?$ { #所有jsp的页面均交由tomcat或resin处理
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
# proxy_pass http://127.0.0.1:8080;
#}

#location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { #所有静态文件由nginx直接读取不经过tomcat或rest
# expires 15d;
#}


#location ~ .*.(js|css)?$ {
# expires 1h;
#}

#location /NginxStatus { #设定查看Nginx状态的地址
#stub_status on;
#access_log on;
#auth_basic "NginxStatus";
#auth_basic_user_file conf/htpasswd;
#htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
#}
}
} 

 

posted on 2021-09-17 16:48  华华中  阅读(2141)  评论(0编辑  收藏  举报

导航