Nginx配置

来源:互联网 发布:如何申请淘宝店铺 编辑:程序博客网 时间:2024/06/17 04:44

  Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。
  Nginx功能丰富,可作为HTTP服务器、反向代理服务器、邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。
Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

Nginx常用功能

1.Http代理,反向代理
  作为web服务器最常用的功能之一,尤其是反向代理。
  这里我给来2张图,对正向代理与反向代理做个诠释,具体细节,大家可以翻阅下资料。
  
  Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。

2.负载均衡
  Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略: 轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。

3.web缓存
  Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

二、Nginx配置文件结构

  如果你下载好啦,你的安装文件,不妨打开conf文件夹的nginx.conf文件(Mac默认在/usr/local/nginx/),Nginx服务器的基础配置,默认的配置也存放在此。
  在nginx.conf的注释符号位#

1.nginx文件整体结构

...    #全局块events {   #events块 ...}http { #http块    ... #http全局块    server { #server块          ...  #server全局块          location [PATTERN] { #location块              ...          }     }     ...  #http全局块}

  1.全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
  2.events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  3.http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  4.server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  5.location块:配置请求的路由,以及各种页面的处理情况。

2.nginx文件详细介绍

########### 每个指令必须有分号结束。##################user  nobody;   #运行用户worker_processes  8;   #启动进程,通常设置成和cpu的数量相等#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;#pid        logs/nginx.pid;#工作模式及连接数上限events {    worker_connections  65535;   #单个后台worker process进程的最大并发链接数, 默认为512    # 事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport    # epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能    use epoll;   }# 设定http服务器,利用它的反向代理功能提供负载均衡支持http {    #设定mime类型,类型由mime.type文件定义    include       mime.types;    default_type  application/octet-stream;    log_format  main '"$time_local","$remote_addr","$http_x_forwarded_for","$http_authorization","$http_host","$http_usertoken","$request","$request_body","$http_referer","$http_user_agent","$status","$request_time","$body_bytes_sent","$upstream_addr","$upstream_response_time","$http_accept","nginx-111","$upstream_status"';    access_log  logs/access.log  main;   #设定日志格式    #sendfile指令指定nginx是否调用sendfile函数(zero copy方式)来输出文件,    #必须设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.    sendfile        on;    #tcp_nopush     on;    client_max_body_size 31m;    client_body_buffer_size 10m;    client_body_temp_path /tmp;    server_names_hash_bucket_size 128;    #timeout    send_timeout 60;    client_body_timeout 60;    client_header_timeout 10;    #reset_timedout_connection on;    #keepalive_timeout  0;    keepalive_timeout  60;    #开启gzip压缩    gzip  on;    gzip_min_length 1k;    gzip_buffers 4 128k;    gzip_comp_level 1;    gzip_types text/plain application/x-javascript text/css application/xml text/javascript image/jpeg image/gif image/png;    #设定请求缓冲    client_header_buffer_size  1k;    large_client_header_buffers 4 4k;    server {        listen 80;    # 监听听80端口, HTTP        server_name devkongfu.changwen.cn;   # DNS域名        access_log  logs/dev_kongfu_access.log  main;  #设定本虚拟主机的访问日志        # 默认请求        location /{             proxy_pass http://dev-fs-kongfu-html/;             proxy_set_header        Host            $host;             proxy_set_header        X-Real-IP       $remote_addr;             proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;        }        location /ajax/{             proxy_pass http://dev-fs-kongfu-web/;             proxy_set_header        Host            $host;             proxy_set_header        X-Real-IP       $remote_addr;             proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;        }        location ~ ^/upload {            proxy_pass    http://fs-file;            proxy_http_version 1.1;            proxy_set_header Connection "";            proxy_set_header   Host $host;            proxy_set_header X-Real-IP $remote_addr;            # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;              proxy_set_header X-Request-Uri $request_uri;        }        #静态文件,nginx自己处理        location ~ ^/(images|javascript|js|css|flash|media|static)/ {            root /var/www/virtual/htdocs;            #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。            expires 30d;        }        location ~.*\.(gif|jpg|jpeg|png|css|js|ico|exe|apk)$ {            expires 300m;        }    }    server {        listen       80;        server_name  localhost;   // 本机        #默认请求        location / {            root   html;   # 定义服务器的默认网站根目录位置            index  index.html index.htm;  # 定义首页索引文件的名称        }        # 定义错误提示页面        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }        #禁止访问 .htxxx 文件        location ~ /\.ht {            allow 202.106.10.34;            deny all;        }        #设定查看Nginx状态的地址        location /NginxStatus {            stub_status      on;            access_log       on;            auth_basic       "NginxStatus";            auth_basic_user_file conf/htpasswd;        }        #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.        location ~ \.php$ {            root /root;            fastcgi_pass 127.0.0.1:9000;            fastcgi_index index.php;            fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;            include fastcgi_params;        }    }    #  这两个是对不同的服务器进行配置    include site-conf/*.conf;        include sites-enabled/*.conf;}

3.include文件(site-conf, sites-enabled)
1.创建一个sites-enabled目录,在里面创建api.changwen.cn.conf文件,内容如下

    server {        listen 80;        server_name api.changwen.cn;  # 文件名跟这个一致,这个最好也就DNS请求域名        access_log  logs/api_fs_access.log  main;        error_log  logs/api_fs_error.log;        # 配置Https        listen 443 ssl;        ssl on;        ssl_certificate ssl/1_api.changwen.cn_bundle.crt;        ssl_certificate_key ssl/2_api.changwen.cn.key;        ssl_session_timeout 5m;        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;        #ssl_ciphers  HIGH:!aNULL:!MD5;        ssl_ciphers AES128+EECDH:AES128+EDH:!aNULL;        ssl_prefer_server_ciphers   on;        location / {            proxy_pass  http://fs-app-web/;  # 这个fs-app-web跟下面的文件名一样            add_header Access-Control-Allow-Origin http://wx.fastschool.cn;            add_header Access-Control-Allow-Credentials true;            add_header Access-Control-Allow-Methods GET,POST,OPTIONS;            proxy_set_header        Host            $host;            proxy_set_header        X-Real-IP       $remote_addr;            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;            proxy_pass_request_headers              on;        }    }

2.创建一个site-conf目录,在里面创建upstream.conf文件,内容如下

    # 设定负载均衡的服务器列表    upstream fs-app-web { # 这个名称跟上面的proxy_pass里文件一样        # weigth参数表示权值,权值越高被分配到的几率越大        # server 10.1.1.107:8701 weight=5;        #s1-instance1        server 192.168.1.107:8701;        #s1-instance2        server 192.168.1.107:8801;        #s2-instance1        server 192.168.1.186:8701;        #s2-instance2        server 192.168.1.186:8801;    }