阅读(2058)

Nginx场景应用技术实例详解

最后一次修改 2018年02月07日

Nginx作为静态资源web服务本文主要和大家分享Nginx场景应用技术希望能帮助到大家。

配置上下文:http、server或location。

可能涉及到,资源压缩、跨域访问、防盗链等场景。

资源压缩配置的上下文:http、server或location
跨域配置的上下文:http、server或location
防盗链配置的上下文:server、location

配置参考

   

<span style="font-size: 14px;">vi /etc/nginx/conf.d/default.conf<br></span>

<span style="font-size: 14px;">server {<br>    ...<br> 
   <br>    # 开启sendfile,提高网络包的传输效率<br> 
      sendfile on;<br>    <br>    
      # 配置图片资源的存放路径及压缩方式<br>
         location ~ .*\.(jpg|gif|png)$ {<br>      
           gzip on;<br> 
                gzip_http_version 1.1;<br>    
                    gzip_comp_level 2;<br>     
                       gzip_types text/plain application/javascript
                        application/x-javascript text/css application/xml text/javascript 
                        application/x-httpd-php image/jpeg image/gif image/png;<br>       
                         # 图片防盗链配置 <br>       
                          # 不指定referer 协议不正确 放行指定IP 放行SEO优化<br>      
                            valid_referers none blocked 39.104.116.91 ~/google\./;<br>     
                               if ($invalid_referer) {<br>            
                               return 403;<br>      
                                 }<br>        root /opt/app/code/images;<br>  
                                   }<br><br>   
                                    # 配置txt|xml资源的存放路径及压缩方式<br> 
                                      location ~ .*\.(txt|xml)$ {<br>      
                                        gzip on;<br>   
                                             gzip_http_version 1.1;<br>      
                                               gzip_comp_level 1;<br>       
                                                gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;<br>        root /opt/app/code/doc;<br>    }<br>    # 缓存与跨域场景配置<br>    location ~ .*\.(html|htm)$ {<br>        #给返回报文添加Cache-Control、Expires头,控制缓存<br>        #expires 24h;<br>        #允许跨域到指定域<br>        add_header Access-Control-Allow-Origin <a rel="nofollow"href="http://somehost.com" target="_blank">http://somehost.com</a>;<br>        add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;<br>        root /opt/app/code;<br>    }<br><br>}<br></span>

Nginx作为代理服务

正向代理

正向代理即客户端代理。客户端通过设置代理服务器,从而达到对目标地址的访问需求。

Nginx可以充当这个代理服务器

配置参考

<span style="font-size: 14px;">vi /etc/nginx/conf.d/default.conf<br></span>

   

<span style="font-size: 14px;">server {<br>    ...<br>    # 可能会涉及到DNS域名解析<br>    

resolver 8.8.8.8;<br>    location / {<br>    

    # 原封不动的让自己转发客户端的请求<br>    

    proxy_pass http://$http_host$request_uri;<br>    }

<br>}<br></span>

   


反向代理

反向代理即服务端代理。对客户端隐藏真实服务器地址。

配置参考


1

   

<span style="font-size: 14px;">vi /etc/nginx/conf.d/default.conf<br></span>

   



1

<span style="font-size: 14px;">
server {<br>location / {<br>      
  #Real Server地址<br>      
    proxy_pass http://127.0.0.1:8080;<br>      
      include proxy_params;<br>    }<br>}<br></span>

   




   
<span style="font-size: 14px;"># 其他代理配置独立出去,方便复用<br>vi /etc/nginx/proxy_param<br></span>

   




<span style="font-size: 14px;"># default就可以了。
除非返回301的场景,可能需要改写<br>proxy_redirect defalut;
<br><br>#配置header信息,让Real Server了解实际客户端信息
<br>proxy_set_header Host $http_host;
<br>proxy_set_header X-Real-IP $remote_addr;
<br><br>#一些代理超时设置<br>proxy_connect_timeout 30;
<br>proxy_send_timeout 60;<br>proxy_read_timeout 60;<br>
<br>#代理缓冲区设置<br>proxy_buffer_size 32k;
<br>proxy_buffering on;<br>proxy_buffers 4 128k;
<br>proxy_busy_buffers_size 256k;
<br>proxy_max_temp_file_size 256k;<br></span>

   


Nginx作为负载均衡服务

参考配置


1

<span style="font-size: 14px;">vi /etc/nginx/conf.d/default.conf<br></span>

   



1

   

<span style="font-size: 14px;">upstream backend {<br>    server 192.168.1.101:8001;<br>    server 192.168.1.102:8002;<br>    server 192.168.1.102:8003 down;<br>    server 192.168.1.103:8004 backup;<br>}<br>server {<br>    ...<br>    location / {<br>        # 代理到upstream组<br>        proxy_pass http://backend;<br>        include proxy_params;<br>    }<br>}<br></span>

   


server额外参数

upstream组的server后面,支持加以下参数:


参数          说明


down    不参与负载均衡    

backup    预留的备份服务器。当没有其他节点提供服务时,它才提供服务    

max_fails    允许请求失败的次数    

fail_timeout    经过max_fails失败后,服务暂停的时间    

max_conns    限制最大接收的连接数    

负载均衡调度算法


方式              说明


轮询    按顺序逐一分配给不同的后端服务器    

加权轮询    weight值越大,分配到的几率越大    

ip_hash    同一IP固定访问同一个后端服务器    

least_conn    哪个连接数少就发哪个机器    

url_hash    按url参数的hash结果来分配    

hash关键数值    hash自定义的key    


1

   

<span style="font-size: 14px;">
# 加权轮询<br>upstream backend {<br> 
   server 192.168.1.101:8001 weight=5;<br>   
    server 192.168.1.102:8002;<br>   
     server 192.168.1.102:8003 down;<br>   
      server 192.168.1.103:8004 backup;<br>}<br></span>



1

<span style="font-size: 14px;"># IP HASH<br>upstream backend 
{<br>    ip_hash;<br>    server 192.168.1.101:8001;<br>  
  server 192.168.1.102:8002;<br>  
    server 192.168.1.102:8003 down;<br>    
    server 192.168.1.103:8004 backup;<br>}<br></span>

   



1

   
<span style="font-size: 14px;"># 最少连接数<br>upstream backend {<br> 
   least_conn;<br>    server 192.168.1.101:8001;<br>   
    server 192.168.1.102:8002;<br> 
      server 192.168.1.102:8003 down;<br> 
         server 192.168.1.103:8004 backup;<br>}<br></span>

    

<span style="font-size: 14px;"># URL HASH<br>upstream backend {<br>  
  url_hash;<br>    server 192.168.1.101:8001;<br>   
   server 192.168.1.102:8002;<br>   
    server 192.168.1.102:8003 down;<br>   
     server 192.168.1.103:8004 backup;<br><br></span>

   

以上就是Nginx场景应用技术分享的详细内容,更多请关注php中文网其它相关文章!