#定义Nginx运行的用户和用户组
user www www;

#nginx进程数,建议设置为等于CPU总核心数(一般等于CPU的总核数或总核数的两倍)。
worker_processes 4;

#指定错误日志的存放路径,错误日志记录级别可选项为:[ debug | info | notice | warn | error | crit //紧急状态 ]
error_log /var/log/nginx/error.log info; #在后边添加类型 默认在nginx主目录的logs目录里面

#用来指定进程id的存储文件位置。
#在Linux/Unix下,很多程序比如nginx会启动多个进程,而发信号的时候需要知道要向哪个进程发信号。不同的进程有不同的pid(process id)。将pid写进文件可以使得在发信号时比较简单。比如要重新加载nginx的配置可以这样写:kill -HUP `cat /path/to/nginx.pid`
pid /var/run/nginx.pid;

#指定进程可以打开的最大描述符这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit - n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit - n的值保持一致。现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3 - 4万时就有进程可能超过10240了,这时会返回502错误
worker_rlimit_nofile 65535;

#工作模式与连接数上限
events
{
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
#使用epoll的I / O模型补充说明: 与apache相类,nginx针对不同的操作系统,有不同的事件模型

use epoll;
#告诉nginx收到一个新连接通知后接受尽可能多的连接。
multi_accept on;
#设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处 worker_connections 2048;
#工作进程的最大连接数量,根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100 % 就行,每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes * worker_connections keepalive_timeout 60;
worker_connections 65535;
}

#设定http服务器
http
{
include mime.types; #文件扩展名与文件类型映射表 只是一个在当前文件中包含另一个文件内容的指令。这里我们使用它来加载稍后会用到的一系列的MIME类型。
default_type application/octet-stream; #默认文件类型 设置文件使用的默认的MIME-type
#charset utf-8 charset gb2312; 设置我们的头文件中的默认的字符集
#并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的
server_tokens off
#sendfile指令指定nginx是否调用sendfile函数(zero copy方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
sendfile on;
#此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
tcp_nopush on; 
#告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
tcp_nodelay on; 
#日志定义格式 log_format name format [format...] name表示定义的格式名称 format表示定义的格式样式 默认格式为combined

#系统日志设置
log_format combined '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#自定义日志格式设定
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#$remote_addr和$http_x_forwarded_for用于记录客户的真实IP 
#$remote_user用于记录远程客户端用户名称 
#$time_local用于记录访问时间与时区 
#$request用于记录请求URL与HTTP协议
#$status用于记录请求状态,例如:成功时状态为200,页面找到时状态为404
#$body_bytes_sent用于记录发送给客户端的文件主体内容大小
#$http_referer用于记录是从哪个页面链接访问过来的
#$http_user_agent用于记录客户端浏览器的相关信息

#默认combined格式的日志目录
#access_log /data1/logs/filename.log

#设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)
access_log /var/log/nginx/ha97access.log access;
#语法access_log access_log path [format [buffer=size | off]]
#path表示日志文件的存放路径 format表示使用log_format指令设置的日志格式名称
#buffer=size表示设置内存缓冲区的大小 eg:buffer=32k
#关闭日志 access_log off

server_names_hash_bucket_size 128; #保存服务器名字的hash表是由指令server_names_hash_max_size和server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键值。因此,如果Nginx给出需要增大hash max size或hash bucket size的提示,那么首要的是增大前一个参数的大小
large_client_header_buffers 4 64k; #客户请求头缓冲大小nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取如果设置过小HTTP头 / Cookie过大会报400错误nginx 400 bad request求行如果超过buffer,就会报HTTP 414错误 (URI Too Long) nginx接受最长的HTTP头部大小必须比其中一个buffer大,否则就会报400的HTTP错误 (Bad Request)
keepalive_timeout 120; #给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。
reset_timedout_connection on;#告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间 
send_timeout 10; #指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。
autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。

client_header_buffer_size 32k; #客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。 [root@web001~]#getconf PAGESIZE 4096但也有client_header_buffer_size超过4k的情况,但是client_header_buffer_size该值必须设置为“系统分页大小”的整倍数
client_max_body_size 8m; # 设定通过nginx上传文件的大小
client_header_timeout 10; #设置请求头的超时时间 我们也可以把这个设置低些。
client_body_timeout 10; #设置请求体的超时时间 我们也可以把这个设置低些。
client_body_buffer_size 512k;#如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。如果注释该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误

#以下和反向代理中有对应解释
client_body_buffer_size 512k;,
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_intercept_errors on;#表示使nginx阻止HTTP应答代码为400或者更高的应答

tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞

limit_conn_zone $binary_remote_addr zone=addr:5m; #置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态。
limit_conn addr 100;#为给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接

open_file_cache max = 65535 inactive = 60s;#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
#open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除
open_file_cache_valid 80s;#这个是指多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;#
open_file_cache_valid 30s; #在open_file_cache中指定检测正确信息的间隔时间。
open_file_cache_min_uses 2;#定义了open_file_cache中指令参数不活动时间期间里最小的文件数。 
open_file_cache_errors on; #指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置。

#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;#buffer 缓存
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

#gzip模块 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。 Gzip压缩模块是Nginx是一个自带的模块但是默认状态是它未启用的,Gzip压缩模块启用后可以对WEB服务器传输给客户端的图片,html,js等数据进行压缩传输了,最高可以达到百分八十左右 该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。该模块启用后,nginx首先检查是否存在请求静态文件的gz结尾的文件,如果有则直接返回该gz文件内容。为了要兼容不支持gzip的浏览器,启用gzip_static模块就必须同时保留原始静态文件和gz文件。这样的话,在有大量静态文件的情况下,将会大大增加磁盘空间。我们可以利用nginx的反向代理功能实现只保留gz文件。
gzip on; #开启gzip压缩输出
gzip_disable "msie6"; #为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。
gzip_static on; #告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件,从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)
gzip_proxied any; #允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。
gzip_min_length 1000; #设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。

gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 4; #设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置
gzip_types text/plain application/x-javascript text/css application/xml;#设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式。
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_vary on;
#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区

proxy_temp_path /data0/proxy_temp_dir;
#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

include /etc/nginx/conf.d/*.conf; 
include /etc/nginx/sites-enabled/*;
limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用

upstream pasis.com {
#详细看 "nginx注释.doc"中的负载均衡
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.8.43:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.8.44:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.8.45:80 weight=1 max_fails=2 fail_timeout=30s;

}

#虚拟主机的配置
server
{
#监听端口
listen 80;
#域名可以有多个,用空格隔开
server_name www.pasis.com pasis.com *.pasis.com;
index index.html index.htm index.php;
root /data/www/pasis; #存在的目录
location ~* \.php${
fastcgi_pass 127.0.0.1:9000; #指定FastCGI服务器监听端口与地址,可以是本机或者其它
fastcgi_index index.php;
include fastcgi.conf;
}
#图片缓存时间设置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 10d;
}
#JS和CSS缓存时间设置
location ~ .*\.(js|css)?$
{
expires 1h;
}

#对 "/" 启用反向代理
location / {
#这个指令设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加端口号的形式
proxy_pass http://127.0.0.1:88;
#如果需要修改从被代理服务器传来的应答头中的"Location"和"Refresh"字段,可以用这个指令设置。
proxy_redirect off;

proxy_set_header Host $host;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,

proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间 发起握手等候响应超时时间
proxy_send_timeout 90; ##后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout 90; #连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
proxy_buffer_size 4k; #设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头,默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小
proxy_buffers 4 32k; #设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k 
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;#设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长

#以下三行,目的是将代理服务器收到的用户的信息传到真实服务器上
proxy_pass http: //img_relay$request_uri;##设置被代理服务器的端口或套接字,以及URL proxy_set_header Host $host;
proxy_set_header X - Real - IP $remote_addr;
proxy_set_header X - Forwarded - For $proxy_add_x_forwarded_for;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

}
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;
}

#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;#主要用于查看Nginx的一些状态信息
access_log on;#访问日志
#以下是保护网站目录的访问
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
#htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
}
#禁止访问.htxxx文件
location~ / \.ht {
deny all;
}

#本地动静分离反向代理配置
#所有jsp的页面均交由tomcat或resin处理
location ~ .(jsp|jspx|do)?$ {
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;
}
#所有静态文件由nginx直接读取不经过tomcat或resin
location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{ expires 15d; }
location ~ .*.(js|css)?$
{ expires 1h; }
}
}

nginx配置详解(转)相关推荐

  1. Nginx配置详解/代理服务的配置说明

    Nginx配置详解 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作 ...

  2. 分布式应用Nginx配置详解

    分布式应用Nginx配置详解 Nginx基本介绍 Nginx安装 安装依赖 安装openssl 安装pcre 安装zlib 安装Nginx Nginx负载均衡 负载均衡配置 失败重试配置 Nginx限 ...

  3. 前端必备 Nginx 配置详解

    前端开发者必备的nginx知识 nginx在应用程序中的作用 解决跨域 请求过滤 配置gzip 负载均衡 静态资源服务器 nginx是一个高性能的HTTP和反向代理服务器,也是一个通用的TCP/UDP ...

  4. Nginx配置详解与示例

    Nginx配置详解 #定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_processes 8;#全局错误日志定义类型,[ ...

  5. nginx配置详解,完全卸载nginx, nginx https配置

    nginx 配置文件详解 文章目录 nginx 配置文件详解 Ubuntu nginx 目录结构 nginx 配置文件结构 默认nginx.conf( (1.18.0版本) location详解,pr ...

  6. nginx配置详解,nginx跨域问题

    文章目录 前言 更改hosts文件 新增velocityerp.top.conf配置文件 nginx配置header参数(解决跨域),接口方配置 nginx反向代理(解决跨域),发送方配置 nginx ...

  7. nginx配置详解1

    Nginx 配置文件详解 user nginx ; #用户 worker_processes 8; #工作进程,根据硬件调整,大于等于cpu核数 error_log logs/nginx_error. ...

  8. JAVA开发与运维(Nginx配置详解)

    对于Nginx的使用,最重要的是理解每个配置项的作用.所以一份详细的Nginx的配置对于JAVA开发和运维尤为重要.我们一般使用两个Nginx配置文件对Nginx进行配置,一个是公共文件nginx.c ...

  9. nginx配置详解(容器、负载)—官方原版

    一.概述 本指南对nginx进行了基本介绍,并描述了一些 可以用它完成的简单任务. 据推测,nginx已经安装在阅读器的机器上. 本指南描述了如何启动和停止nginx,并重新加载其 配置,解释结构 的 ...

  10. 关于Spring Boot WebSocket整合以及nginx配置详解

    这篇文章主要给大家介绍了关于Spring Boot WebSocket整合以及nginx配置的相关资料,文中通过示例代码给大家介绍的非常详细,相信对大家的学习或者工作具有一定的参考学习价值,需要的朋友 ...

最新文章

  1. http响应Last-Modified和ETag以及Apache和Nginx中的配置
  2. Logistic Regression(逻辑回归)原理及公式推导
  3. 4.由键盘任意输入10个数据,分别统计其中的正数个数、正数之和、负数个数、负数之和。
  4. StreamTokenizer输入中的用法
  5. 有人问我:程序员要供祖师爷的话该供谁?
  6. 自然语言处理基础知识HR
  7. 【数据科学系统学习】机器学习算法 # 西瓜书学习记录 [8] 支持向量机(二)...
  8. 【机器人】9-10月项目疑惑
  9. 微信小程序获取手机号(Java后台实现)
  10. python实战演练一:抓取我自己csdm博客信息的标题和文章链接,并存入文件夹《抓取信息》
  11. 解决ttf-mscorefonts-installer无法安装的问题
  12. 局域网内两台电脑无法共享文件问题
  13. VMware虚拟机安装Linux系统(详细版)
  14. 不联网安装 SQL server 2012 的问题
  15. java斗地主发牌_java斗地主发牌程序
  16. 利用单片机最小系统外接DS12C887 在LCD1602上显示实时时钟
  17. 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(成品展示)
  18. 一站式解决方案,华为云CDN这波双十一很强!
  19. 2019年CS224N课程笔记-Lecture 3: Word Window Classification, Neural Networks, and Matrix Calculus
  20. 前端隐藏页面内容的方法

热门文章

  1. DrawerLayout和NavigationView的简单实用
  2. webdriver原理(自己做个记录)
  3. js 判断多个一样的name
  4. JavaScript正则表达式使用详解
  5. PAT刷题笔记-PAT乙1018-锤子剪刀布
  6. 【学习OpenCV4】图像的基本操作
  7. 模板匹配之zernike矩
  8. (2)Mac安装Parallels无法上网
  9. ipv6单播地址包括哪两种类型_IPV6中为啥没有ARP了呢?一文带你搞懂NDP邻居发现协议...
  10. java正则替换数字_Java 正则表达式,替换图片名称,替换数字,和谐用语,复制文件...