user nobody nobody;
nginx worker进程运行的用户属主属组
worker_processes auto;
work进程的个数 ,通常其数值应该为cpu的物理核心数减1
error_log logs/nginx_error.log crit;
错误日志文件及其级别
pid logs/nginx.pid;
pid文件所在的目录
worker_rlimit_nofile 65535;
这个指令是指当一个nginx worker进程打开的最多文件描述符数目即句柄数,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。

events
{
use epoll;
使用epoll的I/O模型
worker_connections 65535;
每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections
multi_accept on;
是否允许一次性地响应多个用户请求,默认为off
}

http
{
include mime.types;

default_type application/octet-stream;

log_format main '$http_x_forwarded_for - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$upstream_addr" "$request_time"';
日志格式 main 是这段配置的名字 在后面access.log 带上表示使用这段日志格式。
access_log off;
##charset gb2312;
etag off;
Etag 是URL的Entity Tag,用于标示URL对象是否改变,区分不同语言和Session等等。具体内部含义是使服务器控制的,就像Cookie那样。
add_header Xxxxx $server_addr;
添加响应头信息 此处使用内置变量 访问会响应一个服务器IP
server_names_hash_bucket_size 128;
保存服务器名字的hash表大小
client_header_buffer_size 64k;
large_client_header_buffers 8 64k;
nginx默认会用client_header_buffer_size这个buffer来读取header值,如果
header过大,它会使用large_client_header_buffers来读取
client_max_body_size 20m;
上传文件的大小
client_body_in_file_only clean;
指定是否将用户请求体存储到一个文件里。 默认为off,当此指定被设置为on时,即使客户端显示指示了请求体长度为0时,nginx还是会为请求创建一个临时文件。clean 是先保存,请求结束了走了响应,就把文件删除
client_body_temp_path /dev/shm 1 2;
这里的client_body_temp_path是制定post上传的$_FILES上传的文件地址,这里的level1,2如果有值就代表存在一级,二级子目录。
fastcgi_param REQUEST_BODY_FILE $request_body_file;

sendfile on;
#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
tcp_nopush on;
#防止网络阻塞
tcp_nodelay on;
#防止网络阻塞
server_tokens off;
#隐藏 Nginx 的版本号,提高安全性。
keepalive_timeout 3;
#连接超时时间,单位是秒

fastcgi_connect_timeout 900;
指定同FastCGI服务器的连接超时时间,这个值不能超过75秒。
fastcgi_send_timeout 900;
指令为上游服务器设置等待一个FastCGI进程的传送数据时间,如果有一些直到它们运行完才有输出的长时间运行的FastCGI进程,那么可以修改这个值,如果你在上有服务器的error log里面发现一些超时错误,那么可以恰当的增加这个值。
指令指定请求服务器的超时时间,指完成了2次握手的连接,而不是完整的连接,如果在这期间客户端没有进行数据传递,那么服务器将关闭这个连接。
fastcgi_read_timeout 900;
前端FastCGI服务器的响应超时时间,如果有一些直到它们运行完才有输出的长时间运行的FastCGI进程,或者在错误日志中出现前端服务器响应超时错误,可能需要调整这个值。
fastcgi_buffer_size 128k;
读取fastcgi应答第一部分需要多大缓冲区
fastcgi_buffers 8 128k;
指定本地需要多少和多大的缓冲区来缓冲fastcgi应答请求,假设一个php或java脚本所产生页面大小为256kb,那么会为其分配4个64kb的缓冲来缓存;
若页面大于256kb,那么大于的256kb的部分会缓存到fastcgi_temp指定路径中,这并非是个好办法,内存数据处理快于硬盘,一般该值应该为站点中php或者java脚本所产生页面大小中间值,如果站点大部分脚本所产生的页面大小为256kb,那么可把值设置为16 16k,4 64k等
fastcgi_busy_buffers_size 128k;
从fastcgi获取返回结果时buffering开启的话,限制buffer的大小
默认值是fastcgi_buffer的2倍
fastcgi_temp_file_write_size 128k;
写入缓存文件使用多大的数据块,默认值是fastcgi_buffer的2倍
fastcgi_intercept_errors on;
自定义错误页面开关

open_log_file_cache max=1000 inactive=60s min_uses=2 valid=1m;
被使用的日志文件描述符缓存 max 最大的文件描述符数量,最大的缓存数量 inactive 在多少时间内不活动,就会被删除 min_uses 如果在inactive时间内,使用超过该参数定义的次数,就会被缓存 valid=1m;缓存大小
open_file_cache max=409600 inactive=10s;
打开的文件描述符,大小时间
open_file_cache_min_uses 1;
open_file_cache_valid 5s;

proxy_connect_timeout 90;
后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_read_timeout 180;
连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
proxy_send_timeout 180;
后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_buffer_size 256k;
设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头,默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小
proxy_buffers 4 256k;
设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长
proxy_temp_path /data0/proxy_temp_dir;
proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
设置内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。

gzip on;
gzip_min_length 1k;
设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。建议设置成大于1k的字节数,小于1k可能会越压越大。
gzip_buffers 4 16k;
设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_http_version 1.1;
gzip_comp_level 2;
设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。
ggzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
设置需要压缩的数据格式。Nginx默认只对text/html进行压缩。
gzip_vary on;
和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩

map $http_x_forwarded_for $clientRealIp {
"" $remote_addr;
~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr;
}
这里取得原始用户的IP地址

limit_req_zone $clientRealIp zone=ConnLimitZone:20m rate=15r/s;
limit_req_log_level notice;
针对原始ip进行限制

upstream fastcgi {
server 127.0.0.1:9000 weight=1;
}
nginx的upstream目前支持4种方式的分配
1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 127.0.0.1:8001 weight=10 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8002 weight=10 max_fails=2 fail_timeout=30s backup;
weight 权重 数字大权重高
max_fails 最大失败次数
fail_timeout 在指定时间内连接到主机的失败次数,超过该次数该主机被认为不可用
backup将当前服务器标记为备份服务器。当主服务器不可用时,向备用服务器传递请求。
}

3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1;
server server2;
fair;
}
5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}

upstream bakend{#定义负载均衡设备的Ip及设备状态
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用负载均衡的server中增加
proxy_pass http://bakend/;

每个设备的状态设置为:
1.down表示单前的server暂时不参与负载
2.weight默认为1.weight越大,负载的权重就越大。
3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path设置记录文件的目录 可以设置最多3层目录

location对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡

server
{
listen 80;
server_name www.xxxx.com;
index index.htm index.php index.html;
root /xxxx;
error_page 404 /404.html;

if ( $http_host = "xxxx.com" ) {
rewrite ^(.*)$ http://www.xxxx.com$1 permanent;
}

include location.conf;
access_log /home/logs/access.log main;
}
include vhost/*.conf;
}

location.conf
location ~ \..*/.*\.php$ {
return 403;
}

location ~ .*\.(php|php5)(\/.*)*$
{
fastcgi_pass fastcgi;
fastcgi_index index.php;
fastcgi_ignore_client_abort on;
fastcgi_param REQUEST_METHOD $request_method;
include fcgi.conf;
fastcgi_split_path_info ^(.+?\.php)(/?.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
access_log off;
expires 365d;
}
location ~ .*\.(htm)$
{
access_log off;
expires 600s;
}
location ~ .*\.(sql|rar|zip|asp)$
{
return 403;
}

location ~ \.php$ {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/dev/shm/php-fcgi.sock;
fastcgi_param SERVICE_NAME www;
# limit_req zone=ConnLimitZone burst=5 nodelay;
}

location ~(favicon.ico) {
expires 365d;
access_log off;
}

注释:变量

Ngx_http_core_module模块支持内置变量,他们的名字和apache的内置变量是一致的。

首先是说明客户请求title中的行,例如$http_user_agent,$http_cookie等等。

此外还有其它的一些变量

$args此变量与请求行中的参数相等

$content_length等于请求行的“Content_Length”的值。

$content_type等同与请求头部的”Content_Type”的值

$document_root等同于当前请求的root指令指定的值

$document_uri与$uri一样

$host与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样

$limit_rate允许限制的连接速率

$request_method等同于request的method,通常是“GET”或“POST”

$remote_addr客户端ip

$remote_port客户端port

$remote_user等同于用户名,由ngx_http_auth_basic_module认证

$request_filename当前请求的文件的路径名,由root或alias和URI request组合而成

$request_body_file

$request_uri含有参数的完整的初始URI

$query_string与$args一样

$sheeme http模式(http,https)尽在要求是评估例如

Rewrite ^(.+)$ $sheme://example.com$; Redirect;

$server_protocol等同于request的协议,使用“HTTP/或“HTTP/

$server_addr request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。

$server_name请求到达的服务器名

$server_port请求到达的服务器的端口号

$uri等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index

转载于:https://www.cnblogs.com/iteemo/p/5463731.html

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,并重新加载其 配置,解释结构 的 ...

最新文章

  1. 秒杀系统架构分析与实战,一文带你搞懂秒杀架构!
  2. 做 AI 大咖在顶级单位之间随兴漂移,好开心!
  3. ASP.NET 获取IIS应用程序池的托管管道模式
  4. 37.Intellij IDEA解决GBK乱码
  5. SQL 进行数据的更新和插入
  6. 关于jstl在tomcat5和tomcat6的部署
  7. Golang基本数据类型的相互转换
  8. yshon对讲机如何调频率_窄带宽、窄脉宽、高重复频率,主动调Q光纤激光器是如何实现的?...
  9. 所有的胜利,与征服自己的胜利比起来,都是微不足道。
  10. tomcat 停止 java 线程不停止_Java Tomcat,底层Netty线程不停止
  11. LOCKDIR加密文件的破解心得
  12. Excel 数据透视表教程大全之 03 刷新数据、添加多个字段作为值字段、值显示为总数的百分
  13. JS变量特点及分号用法
  14. 江苏省2008年普通高校自主招生入选考生名单公示 - 北大清华版
  15. 查找整数c语言程序,查找整数(示例代码)
  16. 用python进行精细中文分句(基于正则表达式)
  17. 基于微信小程序的单词记忆系统(Java+SSM+MySQL)
  18. 院内导航方案怎么样?什么地图可以用于医院导航系统?
  19. 华硕m80微型计算机,小就不能满足你了?华硕M80迷你台式机评测
  20. ITE IT66121 HDMI 音视频分配芯片 发射器

热门文章

  1. [译文]ASCII art with C#
  2. 机器学习算法学习---处理分类问题常用算法(一)
  3. Java过滤HTML标签工具类
  4. java怎么导入一个项目到eclipse
  5. ReactJS学习笔记——npm、JSX、webpack
  6. Java集合源码学习(四)HashMap
  7. libvirt(virsh命令介绍)
  8. rocksdb和leveldb性能比较——写性能
  9. sencha app refresh
  10. 郁金香2013网授汇编逆向与外挂 [ 91课,全 ]