PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 服务器 > Web服务器 > 正文

    nginx配置实例及解释(含反向代理)

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:nginx配置实例及解释(含反向代理)
    1. user www www; 
    2.  
    3. worker_processes auto; 
    4. #nginx要开启的进程数 一般等于cpu的总核数 其实一般情况下开4个或8个就可,不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。 
    5.  
    6. error_log  /home/wwwlogs/nginx_error.log  crit; 
    7.  
    8. pid        /usr/local/nginx/logs/nginx.pid; 
    9.  
    10. worker_rlimit_nofile 51200; 
    11. #更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。 
    12.  
    13.  
    14. #events模块中包含nginx中所有处理连接的设置。 
    15. events 
    16.     { 
    17.         use epoll; 
    18.         #设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。 
    19.          
    20.         worker_connections 51200; 
    21.         #设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。 
    22. 记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。 
    23.  
    24.         multi_accept on; 
    25.         #nginx收到一个新连接通知后接受尽可能多的连接。 
    26.     } 
    27. #HTTP模块控制着nginx http处理的所有核心特性。 
    28. http 
    29.     { 
    30.         include       mime.types; 
    31.         default_type  application/octet-stream; 
    32.  
    33.         server_names_hash_bucket_size 128; 
    34.         client_header_buffer_size 32k; 
    35.         large_client_header_buffers 4 32k; 
    36.         client_max_body_size 50m; 
    37.         #允许客户端请求的单个文件最大字节数 
    38.         client_body_buffer_size 128k; 
    39.         #缓冲区代理缓存用户端请求的最大字节数,可以理解为先保存到本地在传给用户 
    40.          
    41.          
    42.         client_header_timeout 10;  
    43.         #设置请求头的超时时间 
    44.         client_body_timeout 10;  
    45.         #设置请求体的超时时间 
    46.          
    47.         sendfile   on; 
    48.         #可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)。 
    49.          
    50.         tcp_nopush on; 
    51.         #设置nginx在一个数据包里发送所有头文件,而不一个接一个的发送。 
    52.  
    53.         keepalive_timeout 60; 
    54.         #设置客户端链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。 
    55.          
    56.         reset_timedout_connection on; 
    57.         #设置nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。 
    58.          
    59.         tcp_nodelay on; 
    60.         #设置nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。 
    61.          
    62.         fastcgi_connect_timeout 300; 
    63.         fastcgi_send_timeout 300; 
    64.         fastcgi_read_timeout 300; 
    65.         fastcgi_buffer_size 64k; 
    66.         fastcgi_buffers 4 64k; 
    67.         fastcgi_busy_buffers_size 128k; 
    68.         fastcgi_temp_file_write_size 256k; 
    69.  
    70.         gzip on; 
    71.         #采用gzip压缩的形式发送数据。这将会减少我们发送的数据量 
    72.         gzip_min_length  1k; 
    73.         #设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。 
    74.         gzip_buffers     4 16k; 
    75.          
    76.         gzip_http_version 1.1; 
    77.         gzip_comp_level 2; 
    78.         #设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。 
    79.         gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss; 
    80.         #设置需要压缩的数据格式。 
    81.          
    82.         gzip_vary on; 
    83.         gzip_proxied   expired no-cache no-store private auth; 
    84.         #gzip_proxied允许或者禁止压缩基于请求和响应的响应流。如果置为any,意味着将会压缩所有的请求 
    85.         gzip_disable   "MSIE [1-6]\."
    86.         #为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。 
    87.  
    88.         limit_conn_zone $binary_remote_addr zone=perip:10m; 
    89.         #设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态。$binary_remote_addr是限制同一客户端ip地址 
    90.          
    91.         limit_conn_zone $server_name zone=perserver:10m; 
    92.         #$server_name是限制同一server最大并发数; 
    93.          
    94.         limit_conn perip 10; 
    95.         ##如果设置limit_conn_zone,则新增 "limit_conn perip 10;",limit_conn 为给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接 
    96.          
    97.         limit_rate 100k; 
    98.         #limit_rate为限制下载速度 
    99.          
    100.         server_tokens off; 
    101.         #是否在错误页面中的nginx版本数字,这样对于安全性是有好处的 
    102.          
    103.         #log format 
    104.         log_format  access  '$remote_addr - $remote_user [$time_local] "$request" ' 
    105.              '$status $body_bytes_sent "$http_referer" ' 
    106.              '"$http_user_agent" $http_x_forwarded_for'
    107.         access_log off; 
    108.         #设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快 
    109.          
    110.         proxy_connect_timeout 600; 
    111.         #跟后端服务器连接超时时间,发起握手等待响应超时时间 
    112.          
    113.         proxy_read_timeout 600; 
    114.         #连接成功后等待服务器响应时间,其实已经进入后端服务器队列中排队等候处理 
    115.          
    116.         proxy_send_timeout 600; 
    117.         #后端服务器数据传回时间,就是在规定时间内后端服务器必须传完所有数据 
    118.          
    119.         proxy_buffer_size 16k; 
    120.         #代理请求缓存区大小,这个缓存区会存储用户头信息以供nginx进行规则处理,一般空间大小只要能保存下头信息即可 
    121.          
    122.         proxy_buffers 4 32k; 
    123.         #设置单个用户缓存区个数以及最大缓存大小 
    124.          
    125.         proxy_busy_buffer_size 64k; 
    126.         #系统繁忙是可以申请更大的缓存空间 
    127.          
    128.         #upstream 设置一组可以在proxy_pass和fastcgi_pass可用的代理服务器,默认的负载均衡方式为轮询。Upstream模块中server指令用于指定后端服务器名称和参数,服务器名称可以是域名、端口号、ip、或unix socket 
    129.         upstream php_server_pool{ 
    130.             server 192.168.1.10:80 weight=4 max_fails=2 fail_timeout=30s; 
    131.             #指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。  
    132.             server 192.168.1.11:80 weight=4 max_fails=2 fail_timeout=30s; 
    133.             server 192.168.1.12:80 weight=2 max_fails=2 fail_timeout=30s; 
    134.         } 
    135.         upstream message_server_pool{ 
    136.             server 192.168.1.13:3245; 
    137.             server 192.168.1.14:3245 down; 
    138.             #down 表示单前的server暂时不参与负载  
    139.             server 192.168.1.15:3245 backup; 
    140.             #其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。            
    141.         } 
    142.         //第一个虚拟主机,一般默认 
    143.         server{ 
    144.             listen 80; 
    145.             server_name www.yourdomain.com; 
    146.             index index.shtml index.html index.htm index.php; 
    147.             root  /home/wwwroot/www.yourdomain.com; 
    148.      
    149.             #error_page   404   /404.html; 
    150.             include enable-php.conf; 
    151.             location / { 
    152.                 rewrite ^([^\.]*)/shows-([0-9]+)-([0-9]+)-([0-9]+)\.shtml$ $1/index.php?a=shows&catid=$2&id=$3&page=$4 last;  
    153.                 #url重写 
    154.                 if (!-e $request_filename) {    
    155.                     rewrite  ^(.*)$  /index.php?s=$1  last;    
    156.                     break;     
    157.                 } 
    158.              }   
    159.      
    160.             location /nginx_status 
    161.             { 
    162.                 stub_status on; 
    163.                 access_log   off; 
    164.             } 
    165.          
    166.      
    167.             location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 
    168.             { 
    169.                 expires      30d; 
    170.             } 
    171.      
    172.             location ~ .*\.(js|css)?$ 
    173.             { 
    174.                 expires      12h; 
    175.             } 
    176.      
    177.             location ~ /\. 
    178.             { 
    179.                 deny all; 
    180.             } 
    181.             access_log  /home/wwwlogs/www.yourdomain.com.log  access; 
    182.         } 
    183.         //第二个虚拟主机,反向代理php_server_pool这组服务器 
    184.         server{ 
    185.             listen  80; 
    186.             server_name www1.yourdomain.com; 
    187.              
    188.             location / 
    189.             { 
    190.                 #如果后端服务器返回502、504、执行超时等操作,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。 
    191.                 proxy_next_upstream http_502 http_504 error timeout invalid_header; 
    192.                 proxy_pass http://php_server_pool; 
    193.                 proxy_set_header Host www1.yourdomain.com; 
    194.                 proxy_set_header X-Forwarded-For $remote_addr; 
    195.             } 
    196.             access_log  /home/wwwlogs/www1.yourdomain.com.log  access; 
    197.         } 
    198.         //第三个虚拟主机 
    199.         server{ 
    200.             listen 80; 
    201.             server_name www2.yourdomain.com; 
    202.             #访问http://www2.yourdomain.com/message/***地址,反向代理message_server_pool这组服务器 
    203.             location /message/ 
    204.             { 
    205.                 proxy_pass http://message_server_pool; 
    206.                 proxy_set_header Host $host; 
    207.             } 
    208.             location / 
    209.             { 
    210.                 proxy_pass http://php_server_pool; 
    211.                 proxy_set_header Host $host; 
    212.                 proxy_set_header X-Forwarded-For $remote_addr; 
    213.             } 
    214.             access_log off; 
    215.         } 
    216.         include vhost/*.conf; 
    217.     } 

     

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-122-3300-1.html
    相关热词搜索: