Ngins 配置常用八大实例

Posted

tags:

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

实例一、nginx 虚拟主机配置

拷贝一份配置文件,配置虚拟主机;并且创建一个 nginx 的普通用户

[[email protected] ~]# cd /usr/local/nginx/conf
[[email protected] conf]# cp nginx.conf.default  nginx.conf
[[email protected] conf]# useradd nginx -s /sbin/nologin

配置虚拟主机: www.gz1.com 以及配置文件详解

[[email protected] ~]# vim nginx.conf

1)全局变量  部分:-----------------------------------------------------------
user  nginx nginx;        ##用户和用户组都为 nginx
worker_processes  1;      ##Nginx开启的进程数,建议设置为等于CPU总核心数

error_log  /usr/local/nginx/logs/error.log  info;    ##定义全局错误日志定义类型
pid    /usr/local/nginx/logs/nginx.pid;    ##指定进程ID存储文件位置

2)事件驱动模型配置 部分:-------------------------------------------------------
events {
    worker_connections  1024;    ##每个进程可以处理的最大连接数
    #multi_accept on;            ##一定程度降低负载,但服务器吞吐量大时
}

3)设定http 的部分:-----------------------------------------------------------
http {
    include       mime.types;    ##文件扩展名与文件类型映射表,设定mime类型,类型由mime.type文件定义 
    default_type  application/octet-stream;  ##默认文件类型

    charset utf-8;                     ##服务器默认编码                
    #include /etc/nginx/proxy.conf;     ##反向代理配置
    #include /etc/nginx/fastcgi.conf;   ##fastcgi配置

    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;        ##是否调用 sendfile 函数来输出文件(对于普通应用)
    tcp_nopush     off;        ##禁止了小包的发送
    tcp_nodelay     on;        ##允许小包的发送
    #keepalive_timeout  0;
    keepalive_timeout  10;     ##连接超时时间,单位是秒 

#gzip模块设置 :  ------------------------------------------------------
    #gzip  on;                ##开启gzip压缩输出 
    #gzip_min_length 1k;      ##最小压缩文件大小
    #gzip_buffers 4 16k;      ##压缩缓冲区
    #gzip_http_version 1.0;   ##压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
    #gzip_comp_level 2;       ##压缩等级
    #gzip_types text/plain application/x-javascript text/css application/xml;       
                              ##压缩类型,默认就已经包含text/html

#设定负载均衡的服务器列表 :(nginx 作为 web 代理角色 )--------------------
    #upstream  tomcat {       ##tomcat 命名  
      #server 127.0.0.1:8080 weight=1;    ## weight 权值越高被分配到的几率越大
      #server 192.168.1.116:8081 weight=1;
    #}

    #upstream  tomcat2 {      ##可以配置多个负载均衡的服务器列表
      #server 127.0.0.1:8080 weight=1;    
      #server 192.168.1.116:8081 weight=1;
    #}

#虚拟主机的配置 :-------------------------------------------------------
    server {
        listen       80;    ##监听端口
        server_name  www.gz1.com,www.gz2.com;    ##域名可以有多个,用空格隔开
        #charset utf-8;      ##字符编码(上面写有下面可以不用写)
        access_log  /data/web/gz1.com/logs/gz1.access.log  main;  ##定义本虚拟主机的访问日志
        #autoindex  on;   ##所有的文件都以目录形式访问
        location / {
            root   /data/web/gz1.com;       ##访问路径 
            index  index.html index.htm;    ##定义索引首页
            proxy_intercept_errors on;      ##自定义404界面
        }

        error_page  404       /404.html;    ##在根须根下寻找404.html
        error_page  500 502 503 504  /50x.html;

        location = /404.html {              ##错误页面都在此路径下寻找
            root   /data/web/gz1.com;
        }
    }
}

在 客户端 C:WindowsSystem32driversetc 上添加解析

192.168.10.75   www.gz1.com
192.168.10.75   www.gz2.com

在 /data/web/gz1.com 下创建对应的首页文件以及相应的目录

[[email protected] ~]# mkdir -p /data/web/gz1.com/logs
[[email protected] gz1.com]# ls
404.html  index.html  logs

实例二、Nginx 访问控制

1、基于用户的访问控制:

1)、创建用户,并且认证加密。此创建的用户并非 linux 的登陆用户

[[email protected] conf]# yum install -y httpd-tools  ##安装插件
[[email protected] conf]# htpasswd -cm /usr/local/nginx/conf/passwd user1  
                             ## “c” 表示是第一次创建 “m” 表示MD5加密
New password: 
Re-type new password: 
Adding password for user user1

[[email protected] conf]# htpasswd -m /usr/local/nginx/conf/passwd user2
                             ## 后续创建不需要加 “c”   
New password: 
Re-type new password: 
Adding password for user user2

[[email protected] conf]# cat passwd 
user1:$apr1$ZBflnq4Y$czYhTd0xG4JoXHvNaoY9B.
user2:$apr1$WD8DoNj2$oQikEyEP3gweTAUKJyb3C0

2)、虚拟主机添加的配置段

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
        ······
 location /logs {
     root   /data/web/gz1.com;   ####访问路径
     auth_basic "nginx ";        ##基础认证 命名nginx(可自定义)
     auth_basic_user_file /usr/local/nginx/conf/passwd;  ##密码认证路径
     autoindex  on;              ##显示的文件以树状陈列     
     }
        ······

3)、访问 www.gz1.com/logs 登陆认证

技术分享图片

4)、登陆成功,访问

技术分享图片

2、基于主机的访问控制:

1)、在 /data/web/gz1.com 下创建一个 test.txt 文件测试

[[email protected] gz1.com]# vim test.txt 
只允许 192.168.10.1 访问
拒绝其他ip访问

2)、虚拟主机添加的配置段

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
        ······
   location ~* /.*.txt$ {
        root   /data/web/gz1.com;
        allow 192.168.10.1;
        deny all;
         }
        ······

3)、访问 www.gz1.com/test.txt

技术分享图片
用不是 192.168.10.1 的其他主机访问;显示403错误,没有权限访问

技术分享图片

实例三、Nginx 地址重写 rewrite:

地址重写

1)、地址从写访问 /static 下所有文件都会跳转到 /write/2.html (创建对应的目录和文件)

[[email protected] gz1.com]# ls
404.html  index.html  logs  static  test.txt  write
[[email protected] gz1.com]# ls write/ static/
static/:
1.html

write/:
2.html

2)、网页重写虚拟主机添加的配置段

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
        ······
    location /static {
       root   /data/web/gz1.com;
       rewrite .* /write/2.html  permanent;
       }
        ······

3)、访问 http://www.gz1.com/static 会自动跳转到 http://www.gz1.com/write/2.html

技术分享图片

域名重写,引用 if 判断

访问 www.gz2.com 的定向到 www.baidu.com;域名重写虚拟主机添加的配置段

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
        ······
server {
     location / {
       root   /data/web/gz1.com;
       index  index.html index.htm;
    proxy_intercept_errors on;           
       if ( $host ~* www.gz2.com ) {
            rewrite   .*  http://www.baidu.com   permanent;
                }
            }
}
        ······

实例四、Nginx反向代理 :

1、通用匹配 代理
        ······
location  /tset1 {
       root   /data/web/gz1.com; 
       proxy_pass  http://www.jd.com;
    }
        ······
2、正则表达式 匹配代理
        ······
location  ~  ^/test2 {
       root   /data/web/gz1.com; 
    proxy_pass http://www.taobao.com;
    }
        ······
3、地址重写 代理
        ······
location / {
       root   /data/web/gz1.com;
       rewrite  /(.*)$   /index.php?page=$1    break;
       proxy_pass  http://www.tmall.com;
    }
        ······
4、proxy模块的指令
proxy_pass:           ##指定将请求代理至upstream server的URL路径;
proxy_set_header:     ##发送至upsream server的报文的某首部进行重写;
proxy_intercept_errors on; ##拦截后端服务器大于300 的错误信息(自定义404页面)

在根系下配置 proxy_intercept_errors on; 自定义 404 页面

        ······
server {
location / {
     root   /data/web/gz1.com;
     index  index.html index.htm;
     proxy_intercept_errors on;
      }
     error_page  404       /404.html;
     location = /404.html {
        root   /data/web/gz1.com;
      }
}
        ······

实例五、Gzip 传输压缩功能:

在 http 内(server 虚拟主机配置段外):--------------------------------
        ······
http{
  gzip on;     ##开启Gzip
  gzip_min_length 1k;     ##大于1K的才压缩,一般不用改
  gzip_buffers  4 16k;    ##用于压缩的缓冲区大小 
  gzip_comp_level  2;     ##压缩级别,1-10,数字越大压缩的越好,时间也越长
  gzip_types  text/plain  application/x-javascript   text/css    application/xml   text/javascript  application/x-httpd-php ;
}
        ······

实例六、负载均衡:

添加 upstream 模块

        ······
http{
upstream nginx {
        server 192.168.10.74 weight=1  max_fails=10 fail_timeout=10s;
        server 192.168.10.75 weight=1  max_fails=10 fail_timeout=10s;
         }
}
server { 
 location / {
       proxy_pass http://nginx;
       proxy_set_header X-Real-IP   $remote_addr;
           }
      }
}
        ······

技术分享图片
在 客户端 C:WindowsSystem32driversetc 上添加解析

192.168.10.73   www.gz1.com

访问 www.gz1.com 不断刷新观察效果

技术分享图片
技术分享图片

实例七、Nginx 的缓存模块功能:

        ······
http {
proxy_cache_path  /nginx/cache/first  levels=1:2   keys_zone=first:20m  max_size=1g; 
server  {
      ......
      location / {
      ......
             proxy_cache  first;
             proxy_cache_valid   200  10m; 
              }
        }
} 
        ······

[[email protected] ~]# mkdir -p /nginx/cache/first

在 http{ }段(server段前),添加以下语句,在服务器响应报文中,添加一个首部

add_header   X-cache   "$upstream_cache_status  from  $server_addr" ;

技术分享图片

删除缓存路径下的内容,再次观察。

[[email protected] ~]# rm -rf /nginx/cache/first/*

技术分享图片

实例八、Nginx 的限速模块 以及 其他模块:

1、限速模块
        ······
http{
    limit_conn_zone $binary_remote_addr zone=one:10m;
server {
      location /download {
          limit_conn one 1;         ##限制在one中记录状态的每个IP只能发起一个并发连接
          limit_rate_after 1000k;   ##在下载1000k后开始限速
          limit_rate 100k;          ##对每个连接限速100k
           }
       }
}
        ······
2、限制单个IP最大连接数(线程数)
http {
limit_conn_zone   $binary_remote_addr zone=client_addr:10m;
    server {
       location /download {
          limit_conn one 1;         
          limit_rate_after 1000k;  
          limit_rate 100k;
          limit_conn client_addr 10;    ##发数设置为10
           }
       }
}
3、隐藏 Nginx 版本信息

版本信息关闭前

技术分享图片

在配置文件上加

http{  
      server_tokens off; 
}

版本信息关闭后

技术分享图片

以上是关于Ngins 配置常用八大实例的主要内容,如果未能解决你的问题,请参考以下文章

web前端开发JQuery常用实例代码片段(50个)

如何为 XSLT 代码片段配置 CruiseControl 的 C# 版本?

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例

八大排序算法——冒泡排序(动图演示 思路分析 实例代码java 负杂度分析)

八大排序算法——堆排序(动图演示 思路分析 实例代码java 复杂度分析)

Jmeter八大可执行元件的执行顺序