NGINX配置文件动静分离与启动GZIP

一、Nginx是一款开源代码的高性能HTTP服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代理服务

性能优势
web服务器,处理静态文件、索引文件以及自动索引效率高。
代理服务器,快速高效反向代理,提升网站性能。
负载均衡器,内部支持Rails和PHP,也可支持HTTP代理服务器,对外进行服务。同时支持简单容错和利用算法进行负载均衡。
性能方面,Nginx专门为性能设计,实现注重效率。采用Poll模型,可以支持更多的并发连接,并在大并发时占用很低内存。
稳定性方面,采用分阶段资源分配技术,使CPU资源占用率低。
高可用性方面,支持热备,启动迅速。

二、配置文件

配置文件

nginx配置location总结及rewrite规则写法
配置文件主要由四部分组成:main(全区设置),server(主机配置),upstream(负载均衡服务器设置),和location(URL匹配特定位置设置)。
网上有很多文件可以参考,配置项很多,看起来很复杂。下面介绍一些比较有必要了解的配置,其他的如运行后发现不理想可后续调整。
Nginx简介及配置文件详解

三、比较有必要了解的配置

重要部分是gzip、upstream、server location动静分离的配置

#Nginx用户及组:用户 组。window下不指定
    user nginx nginx;
 
#工作进程:数目。根据硬件调整,通常等于CPU数量或者2倍于CPU
    worker_processes 8;

#定义全局错误日志定义类型,[debug|info|notice|warn|crit]
    error_log  logs/error.log  info;

events {
#use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型
    use epoll;

#每个进程可以处理的最大连接数
    worker_connections  65535;   
}

http {
#文件扩展名与文件类型映射表
    include mime.types;
#默认文件类型
    default_type application/octet-stream;

#日志文件格式
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;

#防止网络阻塞
    tcp_nopush on;
    tcp_nodelay on;
    
#客户端连接超时时间,单位是秒
    keepalive_timeout 60;
#客户端请求头读取超时时间
    client_header_timeout 10;
#设置客户端请求主体读取超时时间
    client_body_timeout 10;
#响应客户端超时时间
    send_timeout 10;

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

#gzip模块设置
    #开启gzip压缩输出
    gzip on; 
    #最小压缩文件大小
    gzip_min_length 1k; 
    #压缩缓冲区
    gzip_buffers 4 16k;    
    #压缩等级 1-9 等级越高,压缩效果越好,节约宽带,但CPU消耗大,折中
    gzip_comp_level 5;
    #压缩类型,默认包含text/html(一定要配置,可到conf/mime.types中去查)
    gzip_types text/plain application/x-javascript text/css application/xml;
    #前端缓存服务器缓存经过压缩文件
    gzip_vary on;


upstream web_app {
    #调度算法
    #1.轮循(默认)(weight轮循权值)
    #2.ip_hash:根据每个请求访问IP的hash结果分配。(会话保持)
    #3.fair:根据后端服务器响应时间最短请求。(upstream_fair模块)
    #4.url_hash:根据访问的url的hash结果分配。(需hash软件包)
    #参数:
    #down:表示不参与负载均衡
    #backup:备份服务器
    #max_fails:允许最大请求错误次数,默认1
    #fail_timeout:请求失败后暂停服务时间。
    server 127.0.0.1:8080 weight=1 max_fails=1 fail_timeout=30s;
    server 127.0.0.1:8081 weight=1 max_fails=1 fail_timeout=30s;    
}


server {
        listen  80;
        server_name  localhost;

        #access_log  logs/host.access.log  main;
        
        #直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
        #这里是直接转发给后端应用服务器了,也可以是一个静态首页
        location =/ {
            proxy_pass http://web_app/www1/index.jsp;           
        }   


        #转发动态请求到后端应用服务器
        location / {
        #转发用户变量
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                #nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_connect_timeout  3s; 
        #代理的服务器组upstream 
                proxy_pass http://web_app;          
        }       

        #静态资源直接放到NGINX服务器上指定静态资源路径
    location ~* \.(gif|jpg|jpeg|css|js|ico)$ {      
        root D:/tomcat/8080/webapps/ROOT;

        }

        #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 {
            root   html;
        }
}
}
}
变量

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

你可能感兴趣的:(NGINX配置文件动静分离与启动GZIP)