设为首页 收藏本站
查看: 1077|回复: 0

[经验分享] Linux之Nginx

[复制链接]

尚未签到

发表于 2018-5-23 12:47:18 | 显示全部楼层 |阅读模式
  一:nginx
    Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器;
作为一款轻量级的Web服务器,具有占有内存少,并发能力强等优势,是高连接并发场景下Apache的不错的替代品;
本篇主要介绍Nginx如何作为Web反向代理服务器.
特点:非阻塞,调用数据时磁盘i/o的第一阶段,(磁盘加载到内核内存)是非阻塞.

         事件通知机制.通信机制采用epoll模型可以连接众多客户端请求.
         一个MASTER有多个worker,一个worker又可以响应多个用户请求.
  二:反向代理服务器
  
  在计算机网络中,反向代理是代理服务器的一种。它根据客户端的请求,从后端的服务器上获取资源,然后再将这些资源返回给客户端。与前向代理不同,前向代理作为一个媒介将互联网上获取的资源返回给相关联的客户端,而反向代理是在服务器端作为代理使用,而不是客户端。
  三:nginx的配置文件解析
  1)全局配置段
main                    #全局配置段
#user  nobody;          #进程运行用户和用户组
worker_processes  1;    #指定nginx运行的进程数一般比CPU总数少一个.
#error_log  logs/error.log;  #错误日志
#error_log  logs/error.log  notice; #notice为日志定义的级别
#error_log  logs/error.log  info;   
#pid        logs/nginx.pid; #为了指定PID进程位置
events {               
    worker_connections  1024; #events个数
}

注:计算一台nginx服务器可以连接请求数为:work_processes*worker_connections;如果nginx作为代理服务器时要用(work_processes*worker_connections)/4 ;因为一个nginx作为代理服务器时他要一手托两家,  2)HTTP服务器配置段

http {
    include       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  logs/access.log  main;  #定义日志输出的格式
    sendfile        on;   #开启文件传输高速
    #tcp_nopush     on;   
    #keepalive_timeout  0;  
    keepalive_timeout  65;  #用于设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接
    upstream webserver      #负载均衡模块
                      {
                          server 172.16.16.1 weight=3;
                          server 172.16.16.4 weight=1;
                          server 127.0.0.1:8080 backup;
                      }
   # match webcheck
                     # {
                     #  status 200;
                     #  header Content-Type = text/html;
                     #  body ~ "OK";
                     #  }
    #gzip  on;  
  三:定义nginx的基本访问功能

  这里配置包含了定义nginx的虚拟主机,添加压缩选项,访问控制,防盗链,和显示连接状态.
  1)nginx之虚拟机配置
  nginx也可以像Apache那样创建虚拟主机
server {
               listen 80;
               server_name www.a.com;       #定义第一个虚拟主机
                                            #对www.a.com 进行压缩
  location / {                               #家目录
                   root /www/a.com;
                   index index.html index.htm;
                  }
        }
server {
               listen 80 ;
               server_name www.b.org;      #定义第二个虚拟主机
               root /www/b.org;
    location /admin/
                 {
                     root /www/b.org;      #定义家目录所在
                     index index.html index.htm;
                 }
       }  关于URL匹配配置
   location [ = | ~ | ~* | ^~ ] 优先级

  • location = URI {}:精确匹配指定的路径,不包括子路径,因此,只对当前资源生效;(优先级最高)
  • location ^~ URI {}:不使用正则表达式;(优先级次之)
  • location ~ URI {},location ~* URI {}:模式匹配URI,此处的URI可使用正则表达式,~区分字符大小写,~*不区分字符大小写;(优先级次之)
  • location URI {}:对当前路径及子路径下的所有对象都生效;(优先级最低)


2)nginx压缩
server {
               listen 80;
               server_name www.a.com;       #定义第一个虚拟主机
               gzip on;                     #对www.a.com 进行压缩,开启压缩
               gzip_http_version 1.0;       #压缩http版本
               gzip_comp_level 2;           #压缩级别9级为最高
               gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
                gzip_disable msie6;         #压缩支持的类型
  location / {                              
                   root /www/a.com;
                   index index.html index.htm;
                  }
        }  3)访问控制
  设置访问某个目录需要进行用户登录
server {
               listen 80;
               server_name www.a.com;      
               gzip on;                    
               gzip_http_version 1.0;
               gzip_comp_level 2;
               gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
                gzip_disable msie6;
  location / {                              
                   root /www/a.com;
                   index index.html index.htm;
                  }
        }
server {
               listen 80 default_server;
               server_name www.b.org;      
               root /www/b.org;
               #deny 172.16.16.16;         
               #allow 172.16.0.0/16;        
               #deny all;                  
    location /admin/
                 {
                     root /www/b.org;            
                     auth_basic "admin area"; #在/admin 下访问要输入密码
                     auth_basic_user_file /etc/nginx/.htpasswd;    #密码文件放置位置
                 }
DSC0000.jpg

  

   生成密码时借助Apache的htpasswd来生成用户名和密码.         
htpasswd -c -m /etc/nginx/.htpasswd tom   #借助http的密码添加工具添加访问控制用户.
htpasswd  -m /etc/nginx/.htpasswd tom #第二次添加用户时不用在加上-c选项.

  
  4)搭建下载服务器
server {
               listen 80 default_server;
               server_name www.b.org;     
               root /www/b.org;        
    location /download/
                 {
                      root /www/b.org/;       #在/down创建一个下载站
                      autoindex on;
                 }
       }
DSC0001.jpg

  5)创建访问IP限制功能
server {
               listen 80 default_server;
               server_name www.b.org;      #定义第二个虚拟主机
               root /www/b.org;
               deny 172.16.16.16;          #拒绝172.16.16.16 这台主机访问
               allow 172.16.0.0/16;        #允许172.1.0.0/16网段的主机进行访问
               deny all;                   #除了上面的网段主机访问然后拒绝所有
    location /admin/
                 {
                     root /www/b.org;            
                     auth_basic "admin area"; #在/admin 下访问要输入密码
                     auth_basic_user_file /etc/nginx/.htpasswd;    #密码文件放置位置
                 }
       }
DSC0002.jpg

  

  6)URL重定向
server {
               listen 80 default_server;
               server_name www.b.org;      #定义第二个虚拟主机
               root /www/b.org;
   
    location /download/
                 {
                      root /www/b.org/;       #在/down创建一个下载站
                      autoindex on;
                      rewrite ^/download/(.*\.(jpg|gif|jepg|png))$  /images/$1 break;                     }
                     #访问/download下的图片时都会把地址重写到一个新的目录里/images/下
         }  

  7)查看连接状态
server {
               listen 80 default_server;
               server_name www.b.org;      
               root /www/b.org;
         location /server-status
                     {
                        stub_status on;     
                        #显示连接状态.发起请求数,接受请求数.请求数发起的连接数.
                      }
         }
DSC0003.jpg

  

  

  8)nginx防盗链
server {
               listen 80 default_server;
               server_name www.b.org;      
               root /www/b.org;
             location ~* /.(jpg|png|gif|jpeg)$
                 {
                      root /www/b.org;
                      valid_referers none blocak www.b.org *.b.org;
                      #允许www.b.org的网站进行图片引用
                      if  ($invalid_referer)
                            {
                               rewrite ^/ http://www.b.org/403.html;
                               #拒绝其他引用,如果有倒链直接返回403.html
                             }
                 }  
        }  

  

  四:实现nginx的负载均衡
     负载均衡

http
{
      include mime.types;
      default_type application/octet-stream;
      sendfile on;
      #keepalive_timeout 0;
      keepalive_timeout 65;
      upstream webserver    #实现负载均衡.
                      {
                          server 172.16.16.1 weight=3 ;   
                     #负载均衡代理  后面的server 修改为  proxy_pass http://webserver/
                          server 172.16.16.4 weight=1 ;   
                       }

server
       {
              listen 80;
              server_name www.c.net;
      location /
                      {
                          proxy_pass http://webserver/;
                          proxy_set_header X-Real-IP $remote_addr;
                          #显示真实访问主机的IP地址.
                       }
   


在被代理的主机上要修改http.conf的配置文件,后可以查看真正主机的访问地址而不是代理服务器的地址.
LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined #添加{X-Real-IP}i %信息
查看日志记录: tail -f /var/log/httpd/access_log  
DSC0004.jpg

  

  
DSC0005.jpg

  

  五:nginx的状态检测
http
{
      include mime.types;
      default_type application/octet-stream;
      sendfile on;
      #keepalive_timeout 0;
      keepalive_timeout 65;
      upstream webserver    #实现负载均衡.
                      {
                          server 172.16.16.1 weight=3 max_fails=1 fail_timeout=3;   
                     #负载均衡代理  后面的server 修改为  proxy_pass http://webserver/
                          server 172.16.16.4 weight=1 max_fails=1 fail_timeout=3;   
                            #能够自动检测后面的服务是否正常运行.
                          server 127.0.0.1:8080 backup;
                             #定义没有后端服务时会出现个维护页面.
                       }

server
       {
              listen 80;
              server_name www.c.net;
      location /
                      {
                          proxy_pass http://webserver/;
                          proxy_set_header X-Real-IP $remote_addr;
                          #显示真实访问主机的IP地址.
                       }
  server                                             #定义维护页面         
       {
                listen 8080;                         #定义监听端口为8080
                server_name 127.0.0.1;
                root /www/backup;
        }    当stop node1时 访问www.c.net只会显示node2.  
  

DSC0006.jpg

  

  当node1和node2都停掉时会出现事先准备好的维护界面.
  

DSC0007.jpg

  

  

  

  六:nginx页面缓存
http
{
      include mime.types;
      default_type application/octet-stream;
      sendfile on;
      #keepalive_timeout 0;
      keepalive_timeout 65;
      upstream webserver    #实现负载均衡.
                      {
                          server 172.16.16.1 weight=3 max_fails=1 fail_timeout=3;   
                     #负载均衡代理  后面的server 修改为  proxy_pass http://webserver/
                          server 172.16.16.4 weight=1 max_fails=1 fail_timeout=3;   
                            #能够自动检测后面的服务是否正常运行.
                          server 127.0.0.1:8080 backup;
                             #定义没有后端服务时会出现个维护页面.
                       }
proxy_cache_path /cache/webserver levels=1:2 keys_zone=web:100m max_size=1g inactive=12h; #定义缓存服务.
server
       {
              listen 80;
              server_name www.c.net;
      location /
                      {
                          proxy_pass http://webserver/;
                          proxy_set_header X-Real-IP $remote_addr;
                          #显示真实访问主机的IP地址.
                          proxy_cache web;               #缓存服务名字
                          proxy_cache_valid 200 2h;      #200的缓存2小时
                          proxy_cache_valid 301 302 10m; #301,302缓存10分钟
                          proxy_cache_valid any 1m;      #其他缓存1分钟
                       }
  server                                             #定义维护页面         
       {
                listen 8080;                         #定义监听端口为8080
                server_name 127.0.0.1;
                root /www/backup;
        }  


DSC0008.jpg

DSC0009.jpg

  不管你怎么刷新页面始终停留在node2页面上,看X-Cache:HIT 说明缓存生效.
  

  七:nginx反向代理服务器

  
DSC00010.jpg

  2)修改nginx配置文件

http
{
      include mime.types;
      default_type application/octet-stream;
      sendfile on;
      #keepalive_timeout 0;
      keepalive_timeout 65;
      upstream webserver    #实现负载均衡.
                      {
                          server 172.16.16.1 weight=3 max_fails=1 fail_timeout=3;   
                     #负载均衡代理  后面的server 修改为  proxy_pass http://webserver/
                          server 172.16.16.4 weight=1 max_fails=1 fail_timeout=3;   
                            #能够自动检测后面的服务是否正常运行.
                          server 127.0.0.1:8080 backup;
                             #定义没有后端服务时会出现个维护页面.
                      }
proxy_cache_path /cache/webserver levels=1:2 keys_zone=web:100m max_size=1g inactive=12h; #定义缓存服务.
server
       {
              listen 80;
              server_name www.c.net;
              add_header X-Cache $upstream_cache_status;
      location /
                      {
                          proxy_pass http://172.16.16.1/;#反向代理制172.16.16.1/服务器下.
                          proxy_cache web;               #缓存服务名字
                          proxy_cache_valid 200 2h;      #200的缓存2小时
                          proxy_cache_valid 301 302 10m; #301,302缓存10分钟
                          proxy_cache_valid any 1m;      #其他缓存1分钟
                          proxy_set_header X-Real-IP $remote_addr;
                          #显示真实访问主机的IP地址.
                       }
      location ~* \.(jpg|jpeg|png|gif)$      
              {           
                    proxy_pass http://172.16.16.4;  #图片代理至16.4服务           
                    proxy_cache web;           
                    proxy_cache_valid 200 2h;           
                    proxy_cache_valid 301 302 10m;           
                    proxy_cache_valid any 1m;      
                    }         
       }
  server                                             #定义维护页面         
       {
                listen 8080;                         #定义监听端口为8080
                server_name 127.0.0.1;
                root /www/backup;
        }
}  当访问是图片格式的时候是后面的图片服务器响应;
DSC00011.jpg

  当访问的是非图片格式时是静态服务器响应.
  
DSC00012.jpg

  OK nginx的基本功能就介绍到这下次再讲下nginx的原理性知识.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-480369-1-1.html 上篇帖子: Linux基本设置 下篇帖子: linux find exec mv
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表