Nginx使用简介

什么是Ngnix

  • Nginx (“engine x”) 是俄罗斯人Igor Sysoev(塞索耶夫)编写的一款高性能的 HTTP 和反向代理服务器。
  • Nginx 已经在俄罗斯最大的门户网站── Rambler Media(www.rambler.ru)上运行了4年时间,同时俄罗斯超过20%的虚拟主机平台采用Nginx作为反向代理服务器。

  • 在国内,已经有新浪博客、新浪播客、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家网站、频道使用 Nginx 服务器。

Nginx的优点

  1. 高并发连接
    官方测试能够支撑5W并发连接,在实际生产中可跑到2~3W并发连接数。
  2. 内存消耗少
    在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
  3. 配置文件非常简单
    风格跟程序一样通俗易懂。
  4. 成本廉价
    Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。
  5. 支持Rwrite重写规则
    能够根据域名、URL的不同, 将HTTP请求分发到不同的后端服务器群组。
  6. 内置健康检查功能
    在3万并发连接下,如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前段的访问。
  7. 节省带宽
    支持GZIP压缩,可以添加浏览器本地缓存的Header头
  8. 稳定性高
    用于反向代理,宕机的概率微乎其微。

Ngnix的主要应用类别

  • 使用Nginx结合FastCGI运行PHP、JSP、Perl等应用
  • 使用Nignx做反向代理、负载均衡、规则过滤
  • 使用Nginx运行静态HTML页、图片
  • Nginx与其他新技术结合使用

简单的负载均衡

# 在nginx.conf配置文件中,用upstream指令定义一组反向代理/负载均衡后端服务器池
upstream bbs_server_pool {
    server   192.168.1.15:80 weight=1 max_fails=2 fail_timeout=30s;
    server   192.168.1.16:80 weight=1 max_fails=2 fail_timeout=30s;
    server   192.168.1.17:80 weight=1 max_fails=2 fail_timeout=30s;
    server   192.168.1.18:80 weight=1 max_fails=2 fail_timeout=30s;
}

server {
    listen  80;
    server_name  bbs.yourdomain.com *.bbs.yourdomain.com;
    location /
    {
        proxy_pass http://bbs_server_pool;    #用于指向反向代理的服务器池
        proxy_set_header Host  $host;
        #如果后端的web服务器的程序需要获取用户的IP,请从该Header头获取
        proxy_set_header X-Forwarded-For  $remote_addr;
    }
    access_log off;
}

根据不同的URL转到不同的服务器

server {
    listen       80;
    server_name  abc.domain.com;

    # 正则匹配
    location ~ ^/admincp.php
    {
        proxy_pass http://192.168.1.11;
        proxy_set_header Host  $host;
        proxy_set_header X-Forwarded-For  $remote_addr;
    }

    location /
    {
        proxy_pass http://php_server_pool;
        proxy_set_header Host  $host;
        proxy_set_header X-Forwarded-For  $remote_addr;
    }
}

location的使用

  • = 表示精确匹配
  • ^~ 开头表示url已某个常规字符串开头,不是正则匹配
  • ~ 开头表示区分大小写的正则匹配
  • ~* 开头表示不区分大小写的正则匹配
  • / 通用匹配,如果没有其他匹配任何请求都会匹配到


  • 优先级

(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

反向代理中的缓存配置

# 设置Web缓存区名称为cache_one,缓存空间大小为2000MB,一天清理一次缓存,单个文件超过5M不缓存。
proxy_cache_path    /var/cache/nginx/proxy_cache levels=1:2 kes_zone=cache_one:2000m inactive 1d max_size=5m;
# 注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path     /var/cache/nginx/proxy_cache;
upstream my_server_pool {
    server   192.168.1.2:80 weight=1 max_fails=2 fail_timeout=30s;
    server   192.168.1.3:80 weight=1 max_fails=2 fail_timeout=30s;
}
server
 {
    listen       80;
    server_name  my.domain.com;
    location /
    {
        proxy_set_header Host  $host;
        proxy_set_header X-Forwarded-For  $remote_addr;
        proxy_pass http://my_server_pool;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
    {
        # 对图片、JS、CSS进行缓存,使用Web缓存区cache_one
        proxy_cache cache_one;
        # 对不同HTTP状态码缓存设置不同的缓存时间
        proxy_cache_valid  200 10m;
        proxy_cache_valid  304 3m;
        proxy_cache_valid  301 302 1h;
        proxy_cache_valid  any 1m;

        # 设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存,这里根据“域名、URI、客户端请求Header头中的If-Modified-Since信息”组合成Key。
        proxy_cache_key $host$request_uri$http_if_modified_since;

        # 反向代理,访问后端内容源服务器
        proxy_set_header Host  $host;
        proxy_set_header X-Forwarded-For  $remote_addr;
        proxy_pass http://my_server_pool;
   }
   access_log  off;
}

Ngnix缓存功能的有点

  1. 对于修改实时性要求不高的图片、Flash、CSS样式文件、JavaScript文件,可以在Nginx反向代理(负载均衡)服务器上设置缓存,不用每次请求都转发到后端Web服务器,加快了响应速度。
  2. 减少了Nginx与后端Web服务器的连接数,提高了Nginx处理性能。

Nginx Rewrite规则的相关指令

Nginx Rewrite规则相关指令有if、rewrite、set、return、break等,其中rewrite是最关键的指令。一个简单的rewrite规则语法如下:

rewrite ^/b/(.*).html /play.php?video=$1 break;

如果加上 if 语句,示例如下:

if (!-f $request_filename)
{
  rewrite ^/img/(.*)$ /site/$host/images/$1 last;
}

Nginx的多条件Rewrite示例

if ($host ~* ^(.*?)\.domain\.com$)
{
  set $var_wupin_city $1;
  set $var_wupin '1';
}
if ($host ~* ^qita\.domain\.com$)
{
  set $var_wupin '0';
}
if (!-f $document_root/market/$var_wupin_city/index.htm)
{
  set $var_wupin '0';
}
if ($var_wupin ~ '1')
{
  rewrite ^/wu/$ /market/$var_wupin_city/index.htm last;
}

Nginx Rewrite的四种flag

利用nginx的rewrite的指令,可以实现url的转向,对于rewrtie有四种不同的flag,分别是redirect、permanent、break和last。其中前两种是跳转型的flag,后两种是代理型。跳转型是指有客户端浏览器重新对新地址进行请求,代理型是在WEB服务器内部实现跳转的。

  • lredirect:302跳转到rewrtie后面的地址。
  • lpermanent:301永久调整到rewrtie后面的地址,即当前地址已经永久迁移到新地址,一般是为了对搜索引擎友好。
  • llast:将rewrite后的地址重新在server标签执行。
  • break:将rewrite后地址重新在当前的location标签执行。

Nginx相关示例

worker_processes auto;
error_log /var/log/nginx_error.log crit;
pid /run/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
      use epoll;
      worker_connections 51200;
      multi_accept on;
}
http
{
    include mime.types;
    charset utf-8;
    default_type application/octet-stream;
    server_name_in_redirect off;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 300m;
    client_body_timeout 10;
    types_hash_max_size 2048;
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 60;
    tcp_nodelay on;

    proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=http-cache:500m max_size=10g inactive=60m;
    proxy_redirect off;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_connect_timeout 60;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_temp_path /var/cache/nginx/proxy_cache/tmp;
    #use_temp_path off;

    gzip on;
    gzip_static on;
    gzip_min_length 1024;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain text/css image/png image/gif image/jpeg application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon;
    gzip_vary on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_disable "MSIE [1-6]\.";
    server_tokens off;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
            '$status $body_bytes_sent "$http_referer" '
            '"$http_user_agent" $http_x_forwarded_for $upstream_cache_status '
            '"$upstream_http_content_type" $request_time $upstream_response_time $bytes_sent $request_length '
            '"$upstream_addr"';

    upstream toc {
        server 10.0.3.10:9999 weight=1 max_fails=2 fail_timeout=30s;
        server 10.0.4.10:9999 weight=1 max_fails=2 fail_timeout=30s;
    }

    server {
        listen 80;
        server_name www.domain.com;
        access_log /var/log/access.log main;

        if ($host != 'www.domain.com'){
            rewrite ^/(.*)$ http://www.yingketravel.com/$1 permanent;
        }

        error_page 500 502 503 504 /50x.html;

        location = /50x.html {
            root /usr/local/nginx/html;
        }

        location ~* \.(gif|jpg|png|css|js)$ {
            if ($request_uri !~ "^/toc-web/") {
                rewrite ^/(.*)$ /toc-web/$1 break;
            }
            proxy_pass http://yingke_web;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_cache http-cache;
            proxy_cache_valid 200 302 30d;
            proxy_cache_valid 301 1d;
            proxy_cache_valid any 1m;
            expires 1d;
        }
        location / {
            if ($request_uri !~ "^/toc-web/") {
                    rewrite ^/(.*)$ /toc-web/$1 break;
            }
            proxy_pass http://yingke_web;
            proxy_set_header Host $host;
        }
    }
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值