Nginx配置详解

Nginx配置详解

 

欢迎关注我的公众号《pencil带你玩转Linux》,回复“Linux学习资料”获取视频教程哦。

#nginx进程,一般设置为和cpu核数一样
worker_processes 4;      #或者auto

 

#错误日志存放目录 
error_log  /data1/logs/error.log  crit;  
#运行用户/组,默认即是nginx,可不设置
user nginx   nginx;    
#进程pid存放位置
pid        /application/nginx/nginx.pid;#最大文件打开数(连接),可设置为系统优化后的ulimit -HSn的结果
worker_rlimit_nofile 51200;  #为nginx工作进程改变打开最多文件描述符数目的限制。用来在不重启主进程的情况下增加限制,理论上这个值是最多打开文件数(ulimit -n)与nginx工作进程相除。

Events事件

use epoll;    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能

worker_connections 1024;  #;单个后台worker process进程的最大并发链接数

Http设置

Include  mime.types;设置mime类型,类型由mime.type文件定义

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

#limit模块,可防范一定量的DDOS攻击
#用来存储session会话的状态,如下是为session分配一个名为one的10M的内存存储区,限制了每秒只接受一个ip的一次请求 1r/s
  limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
  limit_conn_zone $binary_remote_addr zone=addr:10m;

#第三方模块lua防火墙
    lua_need_request_body on;
    #lua_shared_dict limit 50m;
    lua_package_path "/application/nginx/conf/waf/?.lua";
    init_by_lua_file "/application/nginx/conf/waf/init.lua";
    access_by_lua_file "/application/nginx/conf/waf/access.lua";

 #设定请求缓存    

 server_names_hash_max_size 64;  服务器名称哈希表的最大值 默认值:512 使用字段:http 
  server_names_hash_bucket_size 128; 服务器名称哈希表每个页框的大小,这个指令的默认值依赖于cpu缓存 默认值:32 ,64, 128  使用字段:http 
  client_header_buffer_size 512k;
  large_client_header_buffers 4 512k;
  client_max_body_size 100m;


  #隐藏响应header和错误通知中的版本号
  server_tokens off;
  #开启高效传输模式   
  sendfile on;#senfile指令指定nginx是否调用 sendfile函数来输出文件,对于普通的应用必须设为 on,如果用来进行下载等应用磁盘IO负载应用,可以设置为off,以平衡磁盘与网络I/O处理速度,降低系统的uptime

 #激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布
  积极的作用是减少网络报文段的数量
  tcp_nopush     on;
  #激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能
  tcp_nodelay on;

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

fastcgi_intercept_errors on|off;

这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。
你必须明确的在error_page中指定处理方法使这个参数有效,正如Igor所说“如果没有适当的处理方法,nginx不会拦截一个错误,这个错误不会显示自己的默认页面,这里允许通过某些方法拦截错误。

增加头标

add_header 

语法: add_header name value

如: add_header    Cache-Control  no-cache;

默认值: none

作用域: http, server, location

当HTTP应答状态码为 200、204、301、302 或 304 的时候,增加指定的HTTP头标。

其中头标的值可以使用变量。

open_file_cache max 102400

使用字段:http, server, location 这个指令指定缓存是否启用,如果启用,将记录文件以下信息: ·打开的文件描述符,大小信息和修改时间. ·存在的目录信息. ·在搜索文件过程中的错误信息 -- 没有这个文件,无法正确读取,参考open_file_cache_errors 指令选项:
·max - 指定缓存的最大数目,如果缓存溢出,最长使用过的文件(LRU)将被移除
例: open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;

open_file_cache_errors
语法:open_file_cache_errors on | off 默认值:open_file_cache_errors off 使用字段:http, server, location 这个指令指定是否在搜索一个文件是记录cache错误.

open_file_cache_min_uses

语法:open_file_cache_min_uses number 默认值:open_file_cache_min_uses 1 使用字段:http, server, location 这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如 果使用更大的值,文件描述符在cache中总是打开状态.
open_file_cache_valid

语法:open_file_cache_valid time 默认值:open_file_cache_valid 60 使用字段:http, server, location 这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息.

----------------------------------------------

#连接超时时间,单位是秒/长连接
  keepalive_timeout 60;

keepalive_requests 8192; --每个连接最大请求数

Log_format日志

普通模式:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                    '$status $body_bytes_sent "$http_referer" '

                     '"$http_user_agent" "$http_x_forwarded_for"';

Access_log /usr/local/nginx/access/access.log main buffer=32k;

#日志文件存放路径

Error_log  /usr/local/nginx/error/error.log error; #错误日志文件存放路径

 

 

字段

说明

$remote_addr

客户端地址

$remote_user

客户端用户名称

$time_local

访问时间和时区

$request

请求的URI和HTTP协议

$http_host

请求地址,即浏览器中你输入的地址(IP或域名)

$status

HTTP请求状态

$upstream_status

Upstream状态

    $body_bytes_sent

发送给客户端的文件内容大小

   $http_user_agent

用户终端浏览器等信息

   $ssl_protocol

Ssl协议版本

   $ssl_cipher

交换数据中的算法

   $upstream_addr

后台upstrean的地址,即真正提供服务的主机地址

  $request_time

整个请求总时间

  $upstream_response_time

请求过程中,upstream响应时间

$http_referer

Url跳转来源

 

Server虚拟主机设置

Listen 80; #监听端口

 server_name  www.abc.com abc.com;    #虚拟主机名称

 index index.html index.htm index.php;    #首页排序,能够识别的文件类型

Root /var/www/html; #网站根目录

 error_page 500 502 404 /templates/kumi/phpcms/404.html;  #错误页面

Charset utf-8;#编码识别

SSL相关

Listen 443 ssl;#监听端口443

ssl on; #开启ssl

ssl_certificate /ls/app/nginx/conf/mgmtxiangqiankeys/server.crt; #服务的证书
ssl_certificate_key /ls/app/nginx/conf/mgmtxiangqiankeys/server.key; #服务端key
ssl_client_certificate /ls/app/nginx/conf/mgmtxiangqiankeys/ca.crt; #客户端证书
ssl_session_timeout 5m; #session超时时间
ssl_verify_client on; # 开户客户端证书验证 
ssl_protocols SSLv2 SSLv3 TLSv1; #指定用于启动特定的加密协议,nginx1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1与TLSv1.2要确保OpenSSL>=1.0.1,SSLv3 现在还有很多地方在用但是有不少被攻击的漏洞

ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #加密算法,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OPENSSL库能够识别的写法,你可以通过openssl -v  cipher RC4:HIGH:!aNULL:!MD5(后面是你所指定的套件加密算法)来看所支持的算法。


ssl_prefer_server_ciphers on; #启动加密算法

    ssl_session_cache shared:SSL:10m;#设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是sheared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1m可以存放越4000个sessions。

Location 标签

deny all;#禁止访问

fastcgi_pass  127.0.0.1:9000;  #抛给本机的9000端口

  fastcgi_index index.php; #设置动态页面

  allow   219.237.222.30 ;#允许访问的ip

 expires      30d;#客户端缓存30天

负载均衡,反向代理相关

proxy_pass http://server反向代理到upstream server1{}模块

  #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

           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_redirect off指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值

proxy_max_temp_file_size 0; #这是每个请求能用磁盘上临时文件最大大小。这些当上游响应太大不能装配到缓冲区时被创建。

proxy_connect_timeout      90; #nginx跟后端服务器连接超时时间(代理连接超时)

proxy_send_timeout         90; #后端服务器数据回传时间(代理发送超时) / 在连接断开之前两次发送至upstream server的写操作的最大间隔时长;

                                                                                                                                                  proxy_read_timeout         90;  #连接成功后,后端服务器响应时间(代理接收超时)/ 在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;

                                                                                                                                            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服务器传

client_max_body_size     #上传文件大小最大限制

client_header_buffer_size 4k;

客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。

分页大小可以用命令getconf PAGESIZE 取得。

client_body_buffer_size 512k;

如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。如果注释该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。

无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误

 

proxy_max_temp_file_size 0;

设置最大的缓存大小,0位不缓存

resolver指令

resolver指令用于指定DNS服务器的IP地址

resolver address ... [valid=time];
  • 1
  • address,DNS服务器的IP地址,默认端口35
  • time,设置数据包在网络中的有效时间

resolve_timeout指令

resolve_timeout指令用于设置DNS服务器域名解析超时时间

resolve_timeout time;

缓存设置

nginx的http_proxy模块,可以实现类似于Squid的缓存功能。Nginx对客户已经访问过的内容在Nginx服务器本地建立副本,这样在一段时间内再次访问该数据,就不需要通过Nginx服务器再次向后端服务器发出请求,所以能够减少Nginx服务器与后端服务器之间的网络流量,减轻网络拥塞,同时还能减小数据传输延迟,提高用户访问速度。同时,当后端服务器宕机时,Nginx服务器上的副本资源还能够回应相关的用户请求,这样能够提高后端服务器的鲁棒性。

proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

Poxy_cache此缓存设置应该写在http模块里

/usr/local/nginx/cache 缓存文件存放地址

Levels=1:2

默认所有缓存文件都放在同一个/usr/local/nginx/cache下,但会影响缓存性能,因此通常会在/usr/local/nginx/cache下面建立子目录用来分别存放不同的文件。假设levels=1:2,Nginx为将要缓存的资源生成key为f4cd0fbc769e94925ec5540b6a4136d0,那么key的最后一位0,以及倒数第2-3位6d作为两级的子目录,也就是该资源最终会被缓存到/usr/local/nginx/cache/0/6d目录中

Keys_zone=my_cache

在共享内存中设置一块存储区域来存放缓存的key和metadata(类似使用次数)这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key 10m可以存储80000个key

max_size

(设置硬盘缓存区空间大小)最大的ceche空间,如果不指定,会使用所有的disk space ,当达到配额后,会删除最少使用的cache文件

Inactive=60m

未被访问文件在缓存中保留的时间,本配置中如果60分钟未被访问则不论状态是否为expired,缓存控制程序会删掉文件。inactive默认是10分钟。需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件

use_temp_path  

如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝

location / {

    ...

    proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;

}

proxy_cache_use_stale

增强站点容错能力

源站有问题时,nginx可以通过proxy_cache_use_stale指令开启容错能力,即使用缓存内容来响应客户端的请求。

  proxy_set_header Host $host;

自定义http header头,用于发送给后端真实服务器。

  proxy_cache cache_one;

启用proxy cache,并指定key_zone。另外,如果proxy_cache off表示关闭掉缓存。

proxy_cache_valid

为不同的HTTP返回状态码的资源设置不同的缓存时长。

  proxy_cache_valid 200 304 12h;

为响应码是200和304的资源,设置缓存时长为12小时

  proxy_cache_valid 301 302 1m;

为响应码是301和302的资源,设置缓存时长为1分钟

  proxy_cache_valid any 1m;

 

  proxy_cache_key $host$uri$is_args$args;

nginx对缓存的资源会设置一个key,NGINX生成的键的默认格式是类似于面的NGINX变量的MD5哈希值:$scheme$proxy_host$request_uri,实际的算法有些复杂。 为了改变变量(或其他项)作为基础键,可以使用proxy_cache_key命令。例如,

proxy_cache_methodes

语法:proxy_cache_methodes[ GET HEAD POST];

该指令用于设置缓存那些HTTP方法,默认缓存HTTP GET/HEAD方法,不缓存HTTP POST

方法

proxy_cache_min_uses

语法:proxy_cache_min_uses the_number;

该指令用于设置缓存的最小使用次数,默认值为1

proxy_cache_purge

缓存清理指令

Gzip压缩

 

在ngixn服务器配置文件中可以通过配置Gzip的使用,可以配置http块,server块或者location块中设置,nginx服务器可以通过ngx_http_gzip_module模块,ngx_http_static_module模块,ngx_http_static_module模块功能ngx_http_gunzip__module模块对这些指令进行分析和处理。

  • Ngx_http_gzip_module模块处理指令
  1. gzip:

用于打开或者关闭gzip压缩功能,用法如下

gzip  on|off #默认为off

  1. gzip_buffers:

用于指定gzip功能压缩文件时使用的缓存空间的大小,语法结构为:

Gzip_buffers number | size;

 Number #指定Nginx服务器需要向服务器申请的缓存空间个数

Size #指定每个缓存空间的大小,从nginx0.7.8开始,默认number*size的值为128,其中size取系统中内存页一页的大小,为4k或者8k等

Gzip_buffers 32   4k | 12   8k;

2.gzip_http_version 

早期的一些浏览器或者http客户端可能不支持gzip压缩,因此有客户有时候会看到乱码,那是因为客户端无法进行解压,因此可以根据不同的http协议版本进行选择性的打开或关闭gzip功能,用法如下:

 

gzip_http_version 1.0 | 1.1; #对使用htto协议1.0和1.1的请求进行压缩

3.gzip_comp_level

指定gzip压缩级别,级别为1-9,默认为1,级别越高压缩率越高即压缩后的文件越小,但占用cpu,压缩率越小压缩后的文件越大,但是节约cpu。

Gzip_comp_level   4; #推销先设置为中间值,比如4或5

4.gzip_disbale

针对不同客户端发起的请求进行有选择的打开或关闭gzip命令,后跟浏览器的名称,用法如下:

 Gzip_disable  msie[1-6]\. 3使用正则表达式可以配置UC字符串中MSIE 1-6浏览器,这三个浏览器在发起请求后nginx将不进行数据包的压缩。

 

5、gzip_min_length

 

设置最少压缩的数据包大小,小于此值的数据包将不被压缩,因为大量的小的数据压缩后没有明显的效果还占用了CPU的资源,因此可以设置最少多大的数据才进行压缩,用法如下:

 

gzip_min_length 1024;  #默认为20,建议设置位1KB,如果设置为0则表示压缩全部数据包

 

6、gzip_proxine

 

在Nginx 服务器作为反向代理的时候有效,用于设置nginx 服务器是否对后端返回的结果进行gzip压缩,用法如下:

 

gzip_proxied off | any; #off为关闭,any为压缩所有后端服务器返回的数据。

 

7、gzip_types

 

设置Nginx服务器可以根据响应页面的类型进行选择性的打开或关闭gzip功能,用法如下:

 

gzip_types       text/plain application/x-javascript text/css application/xml;   #一般情况下如此设置

 

8、gzip_vary

 

用于设置是否在使用gzip功能时发送带有"vary:Accept-Encoding" 头域的响应头部,该头域的主要功能时要告诉客户端数据已经在服务器进行了压缩,默认设置为off,用法如下:

 

gzip_vary on| off;  #默认为off

还可以使用Nginx 配置的add_header指令强制在Nginx服务器的响应头部添加“Vary:Accept-Encoding”也可以实现相同的效果。

 

二:ngx_http_gzip_static_module 模块:

 

该模块辅助用于搜索和发送经过gzip功能压缩的数据,这些数据以*.gz作为后缀名存储在服务器上,如果客户端请求的数据之前被压缩过,并且客户端的浏览器支持压缩,将直接范湖压缩后的数据,该模块使用的是静态编码,在http响应头部包含content-length头域来指明报文的长度,用于服务器可以确定

响应数据的长度的情况,而ngx_http_gzip_module使用chunked编码动态压缩,主要用于服务器无法确定响应数据长度的情况,比如较大文件的下载等情形,此时就要实时生成数据的长度,用法与ngx_http_gzip_module一样,如下:

 

1、gzip_static

 

gzip_static off | on | always; #on为开启并检查客户端浏览器是否中吃gzip压缩功能,off为关闭,always一直发送gzip压缩文件,而不检查浏览器是否支持gzip压缩

 

 注:这是一个可选模块,如果要使用,必须在编译nginx时添加--with-http_gzip_static_module编译,与该模块有关的 指令与ngx_http_gzip_module的模块使用方法是一致的,本模块有gzip_static、gzip_http_version、gzip_proxied、gzip_disable和gzip_vary等。

 

三:ngx_http_gunzip_module 模块处理的两个指令

 

1、gunzip

 

设置Nginx服务器对不支持gzip的客户端返回解压后的数据,如果客户的浏览器支持压缩还仍然返回压缩的后的数据,及可以同时响应支持gzip的浏览器进程压缩,有可以响应不支持gzip的浏览器。

 

gunzip on|off ;#on为打开off为关闭

 

2、gunzip_buffers #用于设置nginx服务器解压gzip文件时候使用的缓存空间大小的,用法如下:

 

gunzip_buffers number size; #number为nginx服务器向系统向系统申请缓存空间的个数,size为每个空间的大小,单位为k,默认情况下number * size的大小为128k,其中size 的值取系统内存页一页的大小为4KB或者8KB即可,用法如下:

gunzip_buffers 32 4k | 16 8k;  #与ngx_http_gzip_module模块下的使用方法一致。

反向代理,负载均衡

设置负载均衡服务器列表

upstream  [名称]

{

Ip_hash;当用户再访问时,会将该请求通过哈希算法,自动定位到该服务器。这样每个访客固定访问一个后端服务器,可以解决session的问题。

server   192.168.52.128 weigth 8;

#weigth参数表示权值,权值越高被分配到的几率越大轮询的加强版

#fail_timeout 等待请求的目标服务器发送响应的时长。

#backup 用于fallback的目的,所有服务器故障时才启动此服务器

#down 手动标记其不再处理如何请求

#fair   顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求。Nginx本身不支持fair,必须下载Nginx的upstream_fair模块。

#least_conn(最少连接数)

# consistent_hash $request_uri; 一致性hash

keepalive  128;

}

URL重写(rewrite)

和apache等web服务一样,rewrite的主要功能是实现URL地址重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规制匹配的,默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持

Rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记

 

语法:

rewrite   <regex>  <replacement>   [flag];

关键字    正则      替代内容      flag标记

关键字:其中关键字rewrite不能改变

 

    正则:perl兼容正则表达式语句进行规则匹配

 

    替代内容:将正则匹配的内容替换成replacement

 

    flag标记:rewrite支持的flag标记

 

 

 

flag标记说明:

 

last  #本条规则匹配完成后,继续向下匹配新的location URI规则

 

break  #本条规则匹配完成即终止,不再匹配后面的任何规则

 

redirect  #返回302临时重定向,浏览器地址会显示跳转后的URL地址

 

permanent  #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

Rewrite参数的标签段位置:

Server,location,if

例如:

Rewrite ^/(.*) http://www.baidu.com/$1 permanent;

说明:

 

rewrite为固定关键字,表示开始进行rewrite匹配规则

 

regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址

 

replacement部分是http://www.czlun.com/$1   $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。

 

flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.czlun.com/$1 地址上

 

 

Regex常用正则表达式说明

字符

描述

\

将在后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如:\n匹配一个换行符,而 \$则匹配 $

^

匹配输入字符串的起始位置

$

匹配输入字符串的结束位置

*

匹配前面的字符零次或多次。如 ol*能匹配 0及ol, oll

+

匹配前面的字符一次或多次。如"ol+能匹配 ololl但不能匹配  o

?

匹配前面的字符零次或一次,例如 “do(es)?”能匹配“do”或者 “does”,“?”等效于“{0,1}”

.

匹配除“\n”之外的任何单个字符,若要匹配包括 “\n”在内的任意字符。请使用诸如 [.\n]之类的模式

(pattern)

匹配括号内pattern并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容,要匹配圆括号字符需要\(Content\)

 

rewrite 企业应用场景

 

Nginx的rewrite功能在企业里应用非常广泛:

 

u 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

 

u 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。

 

u 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com

 

u 根据特殊变量、目录、客户端的信息进行URL调整等

-----------------------------------------------------------------------------------------------------------------

附:完整的nginx.conf配置文件

 

 

user  nginx nginx;

worker_processes  auto;

 

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

 

#pid        logs/nginx.pid;

 

 

events {

    worker_connections  1024; #单个后台worker process进程的最大并发链接数

}

 

 

http {

    include       mime.types; #设定mime类型,类型由mime.type文件定义

    default_type  application/octet-stream;

 

log_format main '$remote_addr - $remote_user [$time_local] '

                     'fwf[$http_x_forwarded_for] tip[$http_true_client_ip] '

                     '$upstream_addr $upstream_response_time $request_time '

                     '$http_host $request '

                     '"$status" $body_bytes_sent "$http_referer" '

                     '"$http_accept_language" "$http_user_agent" ';

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

    #                  '$status $body_bytes_sent "$http_referer" '

    #                  '"$http_user_agent" "$http_x_forwarded_for"';

 

    #access_log  logs/access.log  main;

 

    sendfile        on; #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,

    #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.

    

 

#将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞

    tcp_nopush     on;

    tcp_nodelay   on;

#配置nginx代理服务器哦缓存来减少响应时间

 

     #keepalive_timeout  0;

    keepalive_timeout  65;  #连接超时时间

 

proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;

proxy_temp_path /usr/local/nginx/temp;

    gzip  on; #开启gzip压缩

     #设定请求缓冲

    client_header_buffer_size 128k;

    large_client_header_buffers 4 128k;

    proxy_buffer_size 64k;

    proxy_buffers 8 64k;

   fastcgi_buffer_size 128k;

 fastcgi_buffers 4 128k;

 

 #设定负载均衡的服务器列表

upstream server1 {

 #weigth参数表示权值,权值越高被分配到的几率越大

 #        #本机上的Squid开启3128端口

#     ip_hash; #当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。这样每个访客固定访问一个后端服务器,可以解决session的问题。

        #server 192.168.52.129:8080 weight=5;

        #server 192.168.52.129:80   weight=1;

       server 192.168.52.134:8080;

       #max_fails:最大失败连接次数,失败连接的超时时长由fail_timeout指定;

       #fail_timeout:等待请求的目标服务器发送响应的时长;

       #backup:用于fallback的目的,所有服务均故障时才启动此服务器;

       #down:手动标记其不再处理任何请求

}

upstream server2 {

  server 192.168.52.134:8080;

}

 

    server {

        listen     192.168.52.134:80;

        server_name www.web1.com;

         

        index index.php index.html;

        charset UTF-8;

        #charset koi8-r;

        access_log  /web1/log/access.log ;

        error_log  /web1/log/error.log   error;

        location / {

     index index.php;

       try_files  $uri $uri/  /index.php?$args;

proxy_cache cache_one;

proxy_pass http://server1;

#以下是一些反向代理的配置可删除.

proxy_redirect     off;

 #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

          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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

  

              client_max_body_size 10m;

              client_body_buffer_size 128k;

         proxy_max_temp_file_size 0;

          proxy_connect_timeout      90; #nginx跟后端服务器连接超时时间(代理连接超时)

          proxy_send_timeout         90; #后端服务器数据回传时间(代理发送超时) / 在连接断开之前两次发送至upstream server的写操作的最大间隔时长;

 

          proxy_read_timeout         90;  #连接成功后,后端服务器响应时间(代理接收超时)/ 在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;

          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服务器传

        }

 

        error_page  404              /404.html;

 

        # redirect server error pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

        }

location /backend {

proxy_pass http://server1/backend;

#以下是一些反向代理的配置可删除.

proxy_redirect     off;

# #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

client_max_body_size 10m;

client_body_buffer_size 128k;

proxy_max_temp_file_size 0;

proxy_connect_timeout      90; #nginx跟后端服务器连接超时时间(代理连接超时)

proxy_send_timeout         90; #后端服务器数据回传时间(代理发送超时) / 在连接断开之前两次发送至upstream server的写操作的最大间隔时长;

#

                                                                                                                                                      proxy_read_timeout         90;  #连接成功后,后端服务器响应时间(代理接收超时)/ 在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;

                                                                                                                                            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 ~ \.php$ {

        #    proxy_pass   http://127.0.0.1;

        #}

}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        #

       #location ~*/{

#proxy_pass http://server1;

 #          fastcgi_index  index.php;

  #       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

   #        include        fastcgi_params;

 

    #    }

 

        # deny access to .htaccess files, if Apache's document root

        # concurs with nginx's one

        #

       location ~ /\.ht {

           deny  all;

        }

  location ~.*\.(gif|jpg|jpeg|png|bmp|swf|js|css|php|html)$

  {

  proxy_pass http://server1;

  proxy_set_header Host $host;

  proxy_cache cache_one;

  proxy_cache_valid 200 304 12h;

  proxy_cache_valid 301 302 1m;

  proxy_cache_valid any 1m;

  proxy_cache_key $host$uri$is_args$args;

  }

}

 

    server {

        listen     192.168.52.134:8080;

server_name www.web1.com;

 

         root /var/www/html/newscms/web;

        index index.php index.html;

        charset UTF-8;

        #charset koi8-r;

        access_log  /web1/log/access.log ;

        error_log  /web1/log/error.log   error;

        location / {

  

       index index.php;

        try_files  $uri $uri/  /index.php?$args;

#以下是一些反向代理的配置可删除.

proxy_redirect     off;

 #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

          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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

  

              client_max_body_size 10m;

              client_body_buffer_size 128k;

         proxy_max_temp_file_size 0;

          proxy_connect_timeout      90; #nginx跟后端服务器连接超时时间(代理连接超时)

          proxy_send_timeout         90; #后端服务器数据回传时间(代理发送超时) / 在连接断开之前两次发送至upstream server的写操作的最大间隔时长;

 

          proxy_read_timeout         90;  #连接成功后,后端服务器响应时间(代理接收超时)/ 在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;

          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服务器传

        }

 

        error_page  404              /404.html;

 

        # redirect server error pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

        }

  rewrite  /backend   /backend/index.php break;

#last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮(从第一个开始)重写检查;提前重启新一轮循环。

#break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用。

#redirect:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头,使用相对路径,状态码: 302。

#permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,状态码:301。

  # proxy the PHP scripts to Apache listening on 127.0.0.1:80

        #

        #location ~ \.php$ {

        #    proxy_pass   http://127.0.0.1;

        #}

 

 

        location ~ ^/(images|javascript|js|css|flash|media|static)/ {

            #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。

                        expires 30d;

                                }

 

 

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        #

        location ~*\.php$ {

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include        fastcgi_params;

 

        }

  rewrite  /backend   /backend/index.php break;

 

 

        # deny access to .htaccess files, if Apache's document root

        # concurs with nginx's one

        #

       location ~ /\.ht {

           deny  all;

        }

}

 

 

    # HTTPS server

    #

    #server {

    #    listen       443 ssl;

    #    server_name  localhost;

 

    #    ssl_certificate      cert.pem;

    #    ssl_certificate_key  cert.key;

 

    #    ssl_session_cache    shared:SSL:1m;

    #    ssl_session_timeout  5m;

 

    #    ssl_ciphers  HIGH:!aNULL:!MD5;

    #    ssl_prefer_server_ciphers  on;

 

    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    #}

 

}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx 是一个高性能的开源 Web 服务器和反向代理服务器。它的配置文件是一个重要的部分,影响着服务器的行为和性能。下面是对 Nginx 配置文件的详细解释: 1. 配置文件位置: Nginx配置文件通常位于 /etc/nginx/nginx.conf。此外,可以通过 include 语句包含其他配置文件,使配置更加模块化。 2. 基本结构: Nginx配置文件由多个指令和块组成。指令是配置文件的最小单位,而块是由一对花括号括起来的指令集合。配置文件从上到下按顺序解析,遇到块会进一步解析块内的指令。 3. 主要指令: - worker_processes:指定 Nginx 创建的进程数。通常设置为 CPU 核心数的倍数。 - events:配置 Nginx 处理连接和请求的事件模型。 - http:定义 HTTP 服务器的全局配置。 - server:定义一个虚拟主机(或称为 server block),可以包含多个 location 块。 - location:根据请求的 URI 匹配规则,定义不同的请求处理方式。 4. 常用配置选项: - listen:指定监听的 IP 地址和端口。 - server_name:指定虚拟主机的域名。 - root:指定网站根目录。 - index:指定默认的索引文件。 - location:根据匹配规则指定不同的处理方式,如代理、重定向、静态文件处理等。 5. 变量和指令: Nginx 支持一些内置变量和指令,用于实现动态的配置和请求处理。常见的变量包括 $uri、$args 和 $http_user_agent,常见的指令包括 if、rewrite 和 return。 6. 配置文件的重载: 在修改配置文件后,可以通过发送信号给 Nginx 进程来重新加载配置,而无需停止服务器。常用的信号有 HUP(重新加载配置)和 TERM(停止服务器)。 这些是 Nginx 配置文件的一些基本概念和常用指令。具体的配置方式和使用方法可以根据实际需求进行深入学习和探索。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值