首页 > 代码库 > Nginx之一:编译安装及基础应用

Nginx之一:编译安装及基础应用

Nginx之一:编译安装及基础应用

一、Nginx简介

  Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器。它运行在UNIX,GNU/Linux,BSD各种版本,Mac OS X,Solaris和Windows。据统计,6%的网站使用Nginx Web服务器。Nginx是少数能处理C10K问题的服务器之一。跟传统的服务器不同,Nginx不依赖线程来处理请求。相反,它使用了更多的可扩展的事件驱动(异步)架构。Nginx为一些高流量的网站提供动力,比如WordPress,人人网,腾讯,网易等。

  特点:

      模块化,目前只能将模块编译进Nginx,暂时不支持动态装卸载模块.(httpd优势)

 可靠性,一个主进程(master)控制多个工作进程(worker),工作进程响应用户多个请求(httpd劣势)

      低内存消耗,(httpd劣势)

      支持热部署,(httpd一样)

      支持事件驱动I/O,AI/O,支持mmap(httpd2.4才支持event,劣势)

   Nginx由一个master进程生成多个worker进程,每个worker进程接收用户请求,支持sendfile,AIO,mmap。   

   Nginx官网:https://www.nginx.com,下载地址:http://nginx.org/en/download.html

二、编译安装

  1、下载压缩包,并解压到当前目录,安装依赖组件

  #wget http://nginx.org/download/nginx-1.10.0.tar.gz

  #tar xf nginx-1.10.0.tar.gz

  #yum -y install pcre-devel zlib-devel openssl-devel

  注:pcre-devel(url重写需要的组件,支持较强扩展性),openssl-devel(openssl依赖的组件)

  2、创建启动Nginx用户及组

  #groupadd -r nginx           #创建一个nginx系统组

  #useradd -g nginx -r nginx   #将nginx用户加入nginx组

  3、Nginx,configure预编译之前,常见选项/参数说明

  # cd nginx-1.10.0

 

#./configure --help
 
  --help                             print this message            #帮助
 
  --prefix=PATH                      set installation prefix        #安装路径
  --sbin-path=PATH                   set nginx binary pathname        #主程序安装路径
  --modules-path=PATH                set modules path                #模块安装路径
  --conf-path=PATH                   set nginx.conf pathname        #主配置文件安装路径
  --error-log-path=PATH              set error log pathname        #错误日志路径
  --pid-path=PATH                    set nginx.pid pathname        #pid文件路径
  --lock-path=PATH                   set nginx.lock pathname        #锁文件路径
 
  --user=USER                        set non-privileged user for    #nginx启动时work进程以什么身份运行
                                     worker processes
  --group=GROUP                      set non-privileged group for    #nginx启动时work进程以什么组运行
                                     worker processes
 
  --build=NAME                       set build name             #指定编译的名称
  --builddir=DIR                     set build directory        #指定编译的目录
                                                                     #with的是默认没启用的模块,with后启用
                                                                     #without的是默认启动的模块,without后关闭
  --with-select_module               enable select module            #开起select模块
  --without-select_module            disable select module           #关闭select模块
  --with-poll_module                 enable poll module              #开起poll模块
  --without-poll_module              disable poll module             #关闭poll模块
 
  --with-threads                     enable thread pool support        #启用线程池
 
  --with-file-aio                    enable file AIO support        #开起文件AIO功能,一般用来提高图片站读i/o操作
  --with-ipv6                        enable IPv6 support                #开起ipv6支持
 
  --with-http_ssl_module             enable ngx_http_ssl_module        #启用ssl模块
  --with-http_v2_module              enable ngx_http_v2_module        #源自spdy协议,优先请求浏览器最继续的内容
  --with-http_realip_module          enable ngx_http_realip_module    #反向代理时把真实访问ip传给后端
  --with-http_addition_module        enable ngx_http_addition_module    #在页面后添加文本
  --with-http_xslt_module            enable ngx_http_xslt_module        #在响应XML文件时,转为一个或多个XSLT样式
  --with-http_xslt_module=dynamic    enable dynamic ngx_http_xslt_module    #动态的xslt模块
  --with-http_image_filter_module    enable ngx_http_image_filter_module    #开启图片转换功能,依赖 libgd 库,能够对图片进行转换格式,尺寸等
   
  --with-http_image_filter_module=dynamic        #动态的image_filter模块
                                     enable dynamic ngx_http_image_filter_module
  --with-http_geoip_module           enable ngx_http_geoip_module    #开启GeoIP功能,需要geoIP 数据库的支持
  --with-http_geoip_module=dynamic   enable dynamic ngx_http_geoip_module    #动态geoip模块
  --with-http_sub_module             enable ngx_http_sub_module            #sub模块,用来替换相应包指定内容
  --with-http_dav_module             enable ngx_http_dav_module            #开启WebDAV功能,此方法可以开启PUT、DELETE、COPY、MKCOL、MOVE等HTTP方法,建议关闭
   
  --with-http_flv_module             enable ngx_http_flv_module            #流媒体模块
  --with-http_mp4_module             enable ngx_http_mp4_module            #mp4模块
  --with-http_gunzip_module          enable ngx_http_gunzip_module    #开启gzip方式传输模式,能够大大减少带宽消耗
  --with-http_gzip_static_module     enable ngx_http_gzip_static_module    #压缩静态页面的gizp模块
  --with-http_auth_request_module    enable ngx_http_auth_request_module   #基于请求的返回结果来控制用户鉴权
  --with-http_random_index_module    enable ngx_http_random_index_module   #响应用户以 “/” 结尾的请求,并在该目录下随机选择一个文件作为index文件。此模块先于 ngx_http_index_module 被执行
   
  --with-http_secure_link_module     enable ngx_http_secure_link_module    #开启安全链接功能。防盗链用
  --with-http_degradation_module     enable ngx_http_degradation_module    #内存不足时,Nginx将返回204或444给客户端
  --with-http_slice_module           enable ngx_http_slice_module        #开启切片模块,对大文件切片用
  --with-http_stub_status_module     enable ngx_http_stub_status_module    #nginx状态页面模块
 
  --without-http_charset_module      disable ngx_http_charset_module    #下面都是默认安装的模块,有需要可以关闭
  --without-http_gzip_module         disable ngx_http_gzip_module
  --without-http_ssi_module          disable ngx_http_ssi_module
  --without-http_userid_module       disable ngx_http_userid_module
  --without-http_access_module       disable ngx_http_access_module
  --without-http_auth_basic_module   disable ngx_http_auth_basic_module
  --without-http_autoindex_module    disable ngx_http_autoindex_module
  --without-http_geo_module          disable ngx_http_geo_module
  --without-http_map_module          disable ngx_http_map_module
  --without-http_split_clients_module disable ngx_http_split_clients_module
  --without-http_referer_module      disable ngx_http_referer_module
  --without-http_rewrite_module      disable ngx_http_rewrite_module
  --without-http_proxy_module        disable ngx_http_proxy_module
  --without-http_fastcgi_module      disable ngx_http_fastcgi_module
  --without-http_uwsgi_module        disable ngx_http_uwsgi_module
  --without-http_scgi_module         disable ngx_http_scgi_module
  --without-http_memcached_module    disable ngx_http_memcached_module
  --without-http_limit_conn_module   disable ngx_http_limit_conn_module
  --without-http_limit_req_module    disable ngx_http_limit_req_module
  --without-http_empty_gif_module    disable ngx_http_empty_gif_module
  --without-http_browser_module      disable ngx_http_browser_module
  --without-http_upstream_hash_module
                                     disable ngx_http_upstream_hash_module
  --without-http_upstream_ip_hash_module
                                     disable ngx_http_upstream_ip_hash_module
  --without-http_upstream_least_conn_module
                                     disable ngx_http_upstream_least_conn_module
  --without-http_upstream_keepalive_module
                                     disable ngx_http_upstream_keepalive_module
  --without-http_upstream_zone_module
                                     disable ngx_http_upstream_zone_module
 
  --with-http_perl_module            enable ngx_http_perl_module    #开起perl模块
  --with-http_perl_module=dynamic    enable dynamic ngx_http_perl_module    #动态perl模块
  --with-perl_modules_path=PATH      set Perl modules path
  --with-perl=PATH                   set perl binary pathname
 
  --http-log-path=PATH               set http access log pathname    #访问日志路径
  --http-client-body-temp-path=PATH  set path to store                #客户端上传内容临时存放位置,路径不存在则必须先创建
                                     http client request body temporary files
  --http-proxy-temp-path=PATH        set path to store                #作为代理服务器代理内容临时存放位置
                                     http proxy temporary files
  --http-fastcgi-temp-path=PATH      set path to store                #fastcgi协议工作时所需临时目录
                                     http fastcgi temporary files
  --http-uwsgi-temp-path=PATH        set path to store                #uwsgi协议工作时所需临时目录
                                     http uwsgi temporary files
  --http-scgi-temp-path=PATH         set path to store                #scgi协议工作时所需临时目录
                                     http scgi temporary files
 
  --without-http                     disable HTTP server
  --without-http-cache               disable HTTP cache
 
  --with-mail                        enable POP3/IMAP4/SMTP proxy module    #开起mail模块
  --with-mail=dynamic                enable dynamic POP3/IMAP4/SMTP proxy module    #开起mail动态模块
  --with-mail_ssl_module             enable ngx_mail_ssl_module
  --without-mail_pop3_module         disable ngx_mail_pop3_module
  --without-mail_imap_module         disable ngx_mail_imap_module
  --without-mail_smtp_module         disable ngx_mail_smtp_module
 
  --with-stream                      enable TCP/UDP proxy module    #stream模块用于tcp/udp和负载均衡
  --with-stream=dynamic              enable dynamic TCP/UDP proxy module    #动态stream模块
  --with-stream_ssl_module           enable ngx_stream_ssl_module
  --without-stream_limit_conn_module disable ngx_stream_limit_conn_module
  --without-stream_access_module     disable ngx_stream_access_module
  --without-stream_upstream_hash_module
                                     disable ngx_stream_upstream_hash_module
  --without-stream_upstream_least_conn_module
                                     disable ngx_stream_upstream_least_conn_module
  --without-stream_upstream_zone_module
                                     disable ngx_stream_upstream_zone_module
 
  --with-google_perftools_module     enable ngx_google_perftools_module  #内存管理模块合理调配系统内存资源给服务器
  --with-cpp_test_module             enable ngx_cpp_test_module    #启用ngx_cpp_test_module支持
 
  --add-module=PATH                  enable external module    #启用外部模块支持
  --add-dynamic-module=PATH          enable dynamic external module    #动态加载外部模块
 
  --with-cc=PATH                     set C compiler pathname    #用于C编译环境非默认的情况,指向C编译器路径
  --with-cpp=PATH                    set C preprocessor pathname    #指向C预处理路径
  --with-cc-opt=OPTIONS              set additional C compiler options    #设置C编译器参数
  --with-ld-opt=OPTIONS              set additional linker options    #设置连接文件参数
  --with-cpu-opt=CPU                 build for the specified CPU, valid values:    #指定编译的CPU
                                     pentium, pentiumpro, pentium3, pentium4,
                                     athlon, opteron, sparc32, sparc64, ppc64
 
  --without-pcre                     disable PCRE library usage
  --with-pcre                        force PCRE library usage        #url重写时所需模块,有更强大的正则引擎
 
  --with-openssl=DIR                 set path to OpenSSL library sources        #openssl所在位置
  --with-openssl-opt=OPTIONS         set additional build options for OpenSSL
 
  --with-debug                       enable debug logging

  4、编译安装

  注:由于nginx部分模块不支持动态加载,因此需要什么模块一定要提前指定好(有可能后期的版本也支持动态加载模块,像淘宝tengine分支已支持动态加载模块)。

  nginx-1.10.0]#./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi
  nginx-1.10.0]# make && make install
  nginx-1.10.0]# mkdir -pv /var/tmp/nginx/{client,proxy,fastcgi}

  注:echo "export PATH=/usr/local/nginx/sbin:$PATH" > /etc/profile.d/nginx.sh   #准备nginx程序执行是的环境变量

  5、nginx.conf配置文件简要

  nginx.conf配置文件路径:/etc/nginx/nginx.conf,同时/etc/nginx目录下还包含了fastcgi.conf,mime.types(mime类型配置文件),uwsgi_params(uwsgi配置文件段)。

  nginx的配置文件分两大内容:

  main控制nginx程序的运行

  http主要是操作web服务器,http配置段下支持虚拟机包含在server段中,下面篇章说明

main主配置段:

user  nginx nginx;      #worker进程运行的属主与属组

worker_processes  3;    #worker进程数,建议少于CPU核心数

pid        /var/run/nginx/nginx.pid;    #指定pid文件位置

worker_rlimit_nofile 50000;             #显示所有worker进程所能打开的文件数目

worker_cpu_affinity 0001 0010 0100;     #绑定CPU,八核cpu就8个0,

events {

    worker_connections  5000;          #每个worker进程所能并发处理的连接数

}

http配置段:

include       mime.types;       #包含mime配置文件所有配置内容

sendfile        on;             #开启sendfile功能

keepalive_timeout  65;          #开启长连接

server配置段:

listen       80;                #监听端口

server_name  localhost;         #服务器名字

location{}                      #针对匹配到不同的url可以下发不同的配置段(下方做说明)

gzip  on;                       #开启gzip压缩

  6、Nginx做为http服务常见功能

  注:以下的常见功能详细参考官网,http模块wiki文档以及应用实例

  1)root path  #指定网页文件存放的路径

  2)location [ = | ~ | ~* | ^~ ] uri { … }  #指定url,此处注意符合意义,内含url匹配优先级:[=] > [^~] > [~|~*] >不带任何修饰符,其中[~]表示区分大小写,[~*]表示不区分大小写

  3)alias path #路径映射,注:访问资源URL与实际资源存储位置不一样,用别名定义实际存储位置

  4)error_page #错误页面

  5)ssl      #支持ssl

  6)stu_status  #内置状态页面

  7)url重写  

  8)定制日志

  @@@@@@@@@@

  1)、root path

  ********************************************************************************

  如果root path 在location配置段中,如: 

  root /vhosts/web/; #注:绝对路径:优先级最高  

  location / {

        root   /vhosts/web1;            #访问的是/vhosts/web1/index.html

        index  index.html index.htm;

    }

  ################################################################################

  root /vhosts/web/;

    location / {

        root   html;                    #相对路径,访问的是/usr/local/nginx/html/index.html,

        index  index.html index.htm;

    }

  ********************************************************************************

  ********************************************************************************

  如果root path在server配置段中,建议location不要配置root path,如下:

    root /vhosts/web/;                  #此时才是访问/vhosts/web/index.html

    location / {

        index  index.html index.htm;    

    }

    2)、location指定url,以下一小段测试配置文件为例说明:

location /documents/ {

    root /vhosts/web1;

    index  index.html index.htm;

}

location ^~ /images/ {

    root /vhosts/web2;

    index  index.html index.htm;

}

location ~* \.(png|jpg|jpeg)$ {

    root /vhosts/web3;

    index  index.html index.htm;

}

location = /aaa.png {

    root /vhosts;

    index  index.html index.htm;

}

在vhosts文件创建相应的文件夹和aaa.png图片

# tree

.

├── aaa.png

├── web1

│   ├── documents

│   │   └── aaa.png

│   └── images

│       └── aaa.png

├── web2

│   ├── documents

│   │   └── aaa.png

│   └── images

│       └── aaa.png

└── web3

    ├── documents

    │   └── aaa.png

    └── images

        └── aaa.png

    ###访问:192.168.1.100/images/aaa.png

    ###分析:URL[/images/a.png],服务器匹配location事先定义好的url,可以匹配到第二个与第三个location,因为[^~] > [~*],所以得到/vhosts/web2/images/aaa.png

    ###访问:192.168.1.100/documents/aaa.png

    ###分析:URL[/documents/aaa.png],服务器匹配location事先定义好的url,可以匹配到第一个与第三个location,因为[~|~*] >不带任何修饰符,所以得到/vhosts/web3/documents/aaa.png

  3)、alias path映射路径,以下一小段测试配置文件为例说明

location /documents/ {

    alias /vhosts/web1/;

    index  index.html index.htm;

###访问192.168.1.100/documents/,实际得到:/vhosts/web1/index.html

  4)、error_page根据http响应状态码指定特定的错误页面,如以下

    location / {

    root /vhosts/web1/;

    index  index.html index.htm;

}

error_page  404     /404.html;      #当访问不存在的资源时,回应404错误代码,重新指定/vhosts/web1/目录的404.html

  5)、支持ssl,编译时需要添加模块 --with-http_ssl_module

   ssl配置一般在server配置段中,如:

   server {

    listen       443 ssl;

    server_name  localhost;

    ssl_certificate      /usr/local/nginx/ssl/node1.whc.com.crt;    #从CA申请过来的证书

    ssl_certificate_key  /usr/local/nginx/ssl/node1.key;            #私钥

    ssl_session_cache    shared:SSL:1m;                             #ssl会话共享缓存,1分钟时间

    ssl_session_timeout  5m;                                        #ssl会话超时时间5分钟

    ssl_ciphers  HIGH:!aNULL:!MD5;

    ssl_prefer_server_ciphers  on;

    location / {

        root /vhosts/web1;

        index index.html index.htm;

        }

    }

    注意:以上 node1.stu.com.crt证书和node1.key私钥,测试方便自行生成,方法如下:

@@@CA服务器生成私钥,自行签名

~]#cd /etc/pki/CA

CA]# touch index.txt

CA]# echo 01 > serial

CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048;)

CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3560   

@@@客户端服务器生成私钥,并且生成证书申请请求,拷贝至ca服务器

~]# mkdir /usr/local/nginx/ssl

~]# cd /usr/local/nginx/ssl

ssl]# openssl genrsa -out node1.key 1024

ssl]# openssl req -new -key node1.key -out node1.csr -days 365

ssl]# scp node1.csr root@lvs:/tmp/node1.csr

@@@CA服务器对客户端传送过来的证书请求签发,重新拷贝回给node1客户端

CA]# openssl ca -in /tmp/node1.csr -out ./certs/node1.whc.com.crt -days 365

CA]# scp certs/node1.whc.com.crt root@node1:/usr/local/nginx/ssl/

###测试访问https://node1.whc.com

  6)、stu_status内置状态页面

   在location中定义:

location /nginx-status {

    allow 192.168.1.0/24;       #基于IP地址访问控制

    deny all;

    stub_status on;             #开启状态页面

    access_log off;             #关闭状态页面的访问日志

}

###测试访问#curl http://node1.whc.com/nginx-status

Active connections: 4

server accepts handled requests

 115 115 1542 

Reading: 0 Writing: 2 Waiting: 2

以上各项参数含义如下:

Active connections:当前所有处于打开状态的连接数

accepts:已经接收进来的连接

handled:已经处理过的连接

requests:已经处理过的请求数

Reading:正处于接收请求状态的连接数

Writing:请求已经接收完成,正处于处理请求或发送响应过程的连接数

Waiting:保持连接且处理于活动状态的连接数

  7)、url重写,将特定资源的URL路径修改重定向到其他路径,(break,last,redirect,permanent是可选参数)

  location / {

    root /vhosts/web1;

    rewrite /documents/(.*\.png)$ /images/$1 break;     #将访问/vhosts/web1/documents/路径下以.png结尾的资源,全部重定向到/vhosts/web1/images/

    index  index.html index.htm;

}

   注:

   break参数:如对rewrute规则重写后,由user agent对新的url重新发起新的请求,且不会在被location内的rewrite规则检查,

   last参数:如对rewrute规则重写后,由user agent对新的url重新发起新的请求,如果还有被location内的rewrite匹配中那么就继续重写URL,要注意死循环

   permanent参数:以301 #状态响应码(永久重定向),返回新的URL,

  8)、定制日志

  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;    #上面定义的日志在此处调用,定义日志信息的变量都是内置变量

  三、Nginx常见操作命令

   nginx -s 参数

nginx -s stop #快速的停止Nginx

nginx -s quit #优雅的停止Nginx

nginx -s reload #重载配置文件

service nginx start #启动Nginx

service nginx stop #停止Nginx

service nginx restart #重启Nginx

service nginxreload #重载配置  

  四、Nginx缓存服务器

  环境说明:

  测试服务器3台:192.168.1.100(node1.whc.com)Nginx缓存服务器,192.168.1.101(node2.whc.com)Nginx后端web服务器,192.168.1.10(本地物理机)客户机

  2台服务器操作系统:centos 6.7

  为避免其他因素影响测试:关闭防火墙,配置网络,配置本地主机,配置epel等

  1、Nginx缓存服务器(node1.whc.com),创建缓存目录和修改hosts文件

  # mkdir -pv /cache/nginx

  # chown nginx:nginx /cache/nginx

  # vim /etc/hosts

192.168.1.100    node1.whc.com

192.168.1.101    node1.whc.com

  注:node2服务器,也要修改hosts文件

2、修改Nginx服务器(192.168.1.100)配置文件

# vim /etc/nginx/nginx.conf
user  nginx;
worker_processes  2;
 
error_log  /var/log/nginx/error.log error;
 
pid        /var/run/nginx/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;
 
    proxy_cache_path /cache/nginx/ levels=1:1 keys_zone=mycache:32m;    #缓存路径,1:1表示1级目录下有1个子目录,缓存key名称为mycache后面调用时要用,缓存大小为32m
 
    sendfile        on;
    #tcp_nopush     on;
 
    keepalive_timeout  65;
 
    gzip  on;
 
    upstream whc {        #定义一个负载均衡组whc
        server 192.168.1.101  weight=1 max_fails=2 fail_timeout=1;    #权重1,错误2次,每次超时1秒,就算健康状态,检测失败,还可以在后面街上backup定义其他web服务器,这里只定义一台够说明问题即可
       
        }
 
    server {
        listen       80;
        server_name  node1.whc.com;
 
        location / {
            root    /var/www/html;
            index    index.html index.htm;
            proxy_pass   http://whc/;    #将对本服务器首页的请求代理至负载均衡组whc,以实现负载均衡
            }
 
 
        location /index/ {
            proxy_cache mycache;    #调用缓存key为mycahe
            proxy_cache_valid 200 1m;    #返回值为200的缓存1分钟
           #root   /var/www/html;
            proxy_pass http://192.168.2.101/bbs.html;    #将url为/index/的代理至node2.whc.com/bbs.html
            proxy_set_header Host $host;        #把客户端真实主机名传递给后端服务器
            proxy_set_header X-Real-IP $remote_addr;    #把客户端真实ip传递给后端服务器
            index  index.html index.htm;
        }
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /var/www/html;
        }
 
 
    }
 
}

###启动服务 

    # service nginx reload

    # service nginx restart

  2、后端nginx,修改nginx.conf,并且安装nginx需要添加--with-http_realip_module模块

   #vim /etc/nginx/nginx.conf,添加开启如下配置:

set_real_ip_from   192.168.1.0/24;     #这里是前端代理服务器ip,可以是单个IP或者IP段

real_ip_header     X-Real-IP;

  3、查看缓存结果

  # cd /cache/nginx

  # ls

   3

  # ls 3/c/dsddsfadarea2432wfea234ac22910c12ad5

 @@@@@@@下一章将介绍Nginx之二:负载均衡及高可用@@@@@@@


本文出自 “一万小时定律” 博客,请务必保留此出处http://daisywei.blog.51cto.com/7837970/1850643

Nginx之一:编译安装及基础应用