nginx安装及配置详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx安装及配置详解相关的知识,希望对你有一定的参考价值。

nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。


依赖:

yum groupinstall "Development Tools" "Server Platform Development" -y
yum install  openssl-devel pcre-devel zlib-devel

添加用户组:

groupadd -r nginx
useradd -r -g nginx -s /sbin/nologin  -M nginx

安装nginx1.6.3:

[[email protected] nginx-1.6.3]# ./configure   --prefix=/usr/local/nginx1.6.3     --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_flv_module   --with-http_stub_status_module   --with-http_gzip_static_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/fcgi/   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi  --http-scgi-temp-path=/var/tmp/nginx/scgi   --with-pcre --user=nginx  --group=nginx --add-module=/tools/ngx_http_consistent_hash-master  |tee /tmp/nginx.out
[[email protected] nginx-1.6.3]# make && make install
[[email protected] nginx-1.6.3]# mkdir /var/tmp/nginx
[[email protected] nginx-1.6.3]# chown -R nginx /var/tmp/nginx
[[email protected] local]# cd /usr/local
[[email protected] local]# ln -sv nginx1.6.3/  nginx

配置文件高亮

注意原文件路径 

nginx.vim 下载地址:http://www.vim.org/scripts/script.php?script_id=1886

[[email protected] .vim]# mkdir ~/.vim/syntax/ -pv
[[email protected] ~]# mv /tools/nginx.vim  ~/.vim     #在附件中
[[email protected] .vim]# cd /root/.vim
[[email protected] .vim]# echo ‘au BufRead,BufNewFile /usr/local/nginx1.6.3/conf/*.conf,/usr/local/nginx1.6.3/conf/extra/*.conf if &ft == "" | setfiletype nginx | endif ‘  >> filetype.vim


nginx.conf配置:

[[email protected] conf]# egrep -v ‘^$|#‘ nginx.conf.default >nginx.conf
[[email protected] crontab]# vim /usr/local/nginx/conf/nginx.conf
user  nginx;       #用户
worker_processes  auto;    #worker进程的个数 cpu个数-1
worker_rlimit_nofile 99999;#打开最大的文件个数
pid   /var/run/nginx.pid;
events {
    worker_connections  4000;#每个worker能够并发响应的最大请求数
}
http {
log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;
    include       mime.types;#支持多媒体类型
    default_type  application/octet-stream;
    sendfile        on;               #由内核直接转发 异步模式
    keepalive_timeout  5;   #持久连接5s

    upstream webservers{     #上游服务器  
     ip_hash;
     server martin weight=1 max_fails=2 fail_timeout=2;
     server lucia  weight=1 max_fails=2 fail_timeout=2;
    }
    include extra/*.conf;  #引入虚拟主机
}
[[email protected] crontab]# vim /usr/local/nginx/conf/extra/demo.conf 
server{
        listen 80;
        server_name demo.com;   #虚拟主机
         gzip  on;    #开启压缩功能
         gzip_comp_level 6;     #压缩级别6适中
         gzip_disable msie6;    #不支持ie6
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
        location / {
                root /www/web/demo;
                proxy_pass http://webservers/;    #反向代理服务器
                proxy_set_header X-Real-IP $remote_addr; #转发客户端ip
                fastcgi_param    SCRIPT_FILENAME scripts$fastcgi_script_name;#转发uri
                index index.php index.html;
        }
        error_page 500 502 503 504 /50x.html;
        access_log /mydata/nginx/access_log/demo.access.log main buffer=32k; #访问日志开启缓存写入
        error_log  /mydata/nginx/error_log/error.log  notice;     #错误日志路径及级别
   
       location /status{           
                auth_basic ‘let me see see‘;
                auth_basic_user_file /usr/local/nginx1.6.3/conf/.htpasswd;   #添加认证
                stub_status on;
                access_log off;
                allow 192.168.1.107;     #允许ip 
                deny all;    #拒绝其它ip
        }
}
}

nginx内置变量说明:

[[email protected] conf]# cat /usr/local/nginx/conf/fastcgi_params
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;


gzip介绍:
将nginx响应给客户端的报文进行压缩,能够节约带宽并提高响应速度。要使用压缩功能,需要在编译安装时添加Gzip Precompression模块(--with-http_gzip_static_module)。
gzip配置的常用参数:
gzip on|off;  #是否开启gzip
gzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?)
gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
gzip_disable #正则匹配UA 什么样的Uri不进行gzip
gzip_min_length 200 # 开始压缩的最小长度(再小就不要压缩了,意义不在)
gzip_http_version 1.0|1.1 # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
gzip_proxied          # 设置请求者代理服务器,该如何缓存内容
gzip_types text/plain  application/xml # 对哪些类型的文件用压缩 如txt,xml,html ,css
gzip_vary on|off  # 是否传输gzip压缩标志
  注意:
图片/mp3这样的二进制文件,不必压缩
因为压缩率比较小, 比如100-80字节,而且压缩也是耗费CPU资源的.
比较小的文件不必压缩

gzip on;
gzip_comp_level 6;
gzip_disable msie6;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;


 expires介绍:
nginx的缓存设置  提高网站性能
对于网站的图片,尤其是新闻站, 图片一旦发布, 改动的可能是非常小的.我们希望 能否在用户访问一次后, 图片缓存在用户的浏览器端,且时间比较长的缓存.
可以, 用到 nginx的expires设置 .
nginx中设置过期时间,非常简单,
在location或if段里,来写.
格式  expires 30s;
      expires 30m;
      expires 2h;
      expires 30d;
(注意:服务器的日期要准确,如果服务器的日期落后于实际日期,可能导致缓存失效)

URL rewrite:

location / {
                    root /www/b.org;
                    rewrite ^/images/(.*)$ /imgs/$1 last;
                    rewirte ^/imgs/(.*)$ /images/$1;
                }

这样还是死循环
                http://www.b.org/images/a.jpg --> http://www.b.org/imgs/a.jpg   会重新进来然后在匹配
                last: 一旦被当前规则匹配并重写后立即停止检查后续的其它rewrite的规则,而后通过重写后的规则重新发起请求;
                break: 一旦被当前规则匹配并重写后立即停止后续的其它rewrite的规则,而后继续由nginx进行后续操作;
                redirect: 返回302临时重定向;
                permanent: 返回301永久重定向;
一般将rewrite写在location中时都使用break标志


location /status{           
                auth_basic ‘let me see see‘;
                auth_basic_user_file /usr/local/nginx1.6.3/conf/.htpasswd;   #添加认证
                stub_status on;
                access_log off;
                allow 192.168.1.107;     #允许ip 
                deny all;    #拒绝其它ip
        }


 用户认证功Auth Basic模块:

[[email protected] conf]# htpasswd -m -c /usr/local/nginx1.6.3/conf/.htpasswd tom    #c创建文件
[[email protected] conf]# htpasswd -m  /usr/local/nginx1.6.3/conf/.htpasswd marvin
 location /status{
                add_header Cache-Control no-store;
                auth_basic ‘let me see see‘;
                auth_basic_user_file /usr/local/nginx1.6.3/conf/.htpasswd;
                stub_status on;
                access_log off;
                allow 192.168.1.107;
                deny all;
        }

反向代理,负载均衡

通过upstream模块可定义一个上游服务器组,在反向代理时,将请求代理至这个服务器组,实现负载均衡。upstream模块的负载均衡算法主要有三种,轮调(round-robin)、ip哈希(ip_hash)和最少连接(least_conn)三种。

http {
upstream webservers{
     ip_hash;
     server martin weight=1 max_fails=2 fail_timeout=2;
     server lucia  weight=1 max_fails=2 fail_timeout=2;
    }
location / {
                root /www/web/demo;
                proxy_pass http://webservers/;
                proxy_set_header X-Real-IP $remote_addr;
                index index.php index.html;
        }
}
server:定义一个upstream服务器的地址,还可包括一系列可选参数,如:
    weight:权重;
    max_fails:最大失败连接次数,失败连接的超时时长由fail_timeout指定;
    fail_timeout:等待请求的目标服务器发送响应的时长;
    backup:用于fallback的目的,所有服务均故障时才启动此服务器;
    down:手动标记其不再处理任何请求;


over

以上是关于nginx安装及配置详解的主要内容,如果未能解决你的问题,请参考以下文章

Nginx的安装及配置详解

Nginx 服务器安装及配置文件详解

Nginx安装及配置详解

Nginx 服务器安装及配置文件详解

nginx服务器安装及配置文件详解

Nginx 服务器安装及配置文件详解