Nginx教程

nginx

本文主要是介绍nginx,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

nginx

目录
  • nginx
    • 一、nginx概述
      • 1. nginx简介
      • 2. nginx特点
      • 3. nginx应用场景
    • 二、nginx使用方式
    • 三、配置虚拟主机
      • 1. 通过端口区分不同的虚拟主机
      • 2. 通过域名区分不同的虚拟主机
    • 四、nginx作为反向代理服务器
      • 1. 代理概述
      • 2. nginx实现反向代理
    • 五、nginx作为负载均衡器
      • 1. 负载均衡器概述
      • 2. nginx实现负载均衡

一、nginx概述

1. nginx简介

  • nginx(发音同 engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器

2. nginx特点

  • 内存占用少,并发能力强

  • nginx专为性能优化而开发, 在高连接并发的情况下,能够支持高达 50000 个并发连接数的响应

    Tomcat仅支持500左右

  • nginx支持热部署, 可以在不间断服务的情况下,对软件版本进行升级

3. nginx应用场景

  • http服务器

    可以做网页静态服务器

  • 虚拟主机

    实际开发时实现了一台服务器虚拟出多个网站(不同域名/端口号)

  • 反向代理,负载均衡

    正向代理:正向代理代理的是客户端, 服务端不知道实际发起请求的客户端

    反向代理:代理服务器接收客户端的请求,然后将请求转发给网站内部应用服务器,并将从服务器上得到的结果返回给客户端

    单台服务器不能满足用户的请求时,需要用多台服务器集群,可以使用nginx做代理服务器,nginx接收到请求后会将请求转发给后面的应用服务器

    多台服务器可以平均分担负载,不会因为某台服务器负载高宕机或者某台服务器闲置的情况

二、nginx使用方式

  • 启动

    cd /usr/local/nginx/sbin
    
    ./nginx
    
  • 关闭

    ./nginx -s stop
    
  • 查看进程

    ps aux | grep nginx
    
  • 启动nginx后在浏览器中访问服务器IP前,需要先关闭防火墙

    默认配置了80端口

    /sbin/iptables -I INPUT -p tcp --dport 指定的端口号 -j ACCEPT
    

三、配置虚拟主机

1. 通过端口区分不同的虚拟主机

  • 在nginx.conf中配置虚拟主机,一个server代表一个虚拟主机

    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
    
        server {
            listen       80;
            server_name  localhost; # 配置localhost无需更改host自动映射为本机IP
    
            location / {
                root   html;
                index  index.html index.htm;
            }
            
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    
        # 配置新的server
        server {
            listen       81; # 修改端口
            server_name  localhost;
    
            location / {
                root   html81; # 重新制定一个目录
                index  index.html index.htm;
            }
            
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    
  • 拷贝一份html文件夹作为新server的root目录

    /usr/local/nginx
    
    cp -r html/ html81
    
  • 重新加载nginx

    cd /usr/local/nginx/sbin
    
    ./nginx -s reload
    
  • 访问当前服务器IP下配置的不同端口号

    http://192.168.xxx.xxx 访问第一个server
    http://192.168.xxx.xxx:81 访问第二个server
    

2. 通过域名区分不同的虚拟主机

  • 相关概念

    • 域名级别
      • 一级:例如.com.org.cn
      • 二级:例如baidu.comzhihu.com
      • 三级:例如www.baidu.comwww.zhihu.com
    • 域名绑定
      • 一个域名对应一个IP地址,一个IP地址可以被多个域名绑定
      • 通过DNS服务器去解析域名
  • 配置域名映射的方式

    • 可以在本机上配置域名和IP的映射关系,如果hosts文件中配置了域名和IP的对应关系,不需要走DNS服务器

      修改window中的hosts文件:(C:\Windows\System32\drivers\etc)

      192.168.xxx.xxx www.ng.com
      
    • 也可以使用SwitchHosts修改hosts中域名映射配置(同上面的方法,只是简化hosts文件的修改)

  • 通过域名区分不同的虚拟主机步骤

    1. 在nginx.conf中配置虚拟主机,端口号相同,server_name和root目录名不同

      worker_processes  1;
      
      events {
          worker_connections  1024;
      }
      
      http {
          include       mime.types;
          default_type  application/octet-stream;
          sendfile        on;
          keepalive_timeout  65;
      
          server {
              listen       80;
              server_name  www.t1conycass.com; # 配置后需要在hosts文件中修改该域名对应的IP
      
              location / {
                  root   html-t1; # 重新制定一个目录
                  index  index.html index.htm;
              }
              
              error_page   500 502 503 504  /50x.html;
              location = /50x.html {
                  root   html;
              }
          }
      
          # 配置新的server
          server {
              listen       80; # 修改端口
              server_name  www.t2conycass.com; # 配置后需要在hosts文件中修改该域名对应的IP
      
              location / {
                  root   html-t2; # 重新制定一个目录
                  index  index.html index.htm;
              }
              
              error_page   500 502 503 504  /50x.html;
              location = /50x.html {
                  root   html;
              }
          }
      }
      

      重新加载nginx配置文件

      cd /usr/local/nginx/sbin
      
      ./nginx -s reload
      
    2. 使用SwitchHosts修改hosts中域名映射配置,两个域名同时绑定一个IP

      # nginx
      192.168.197.128 www.t1conycass.com
      192.168.197.128 www.t2conycass.com
      

四、nginx作为反向代理服务器

1. 代理概述

  • 代理(服务器):客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务器接受客户机请求之后,再向目的主机发出,并接收目的主机返回的数据再发送给客户机

  • 正向代理:正向代理代理的是客户端,服务端不知道实际发起请求的客户端

    案例:国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,先将请求发送到到代理服务器,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了

  • 反向代理:反向代理代理的是服务器,代理服务器接收客户端的请求,将请求转发到网站内部的应用服务器上,并将应用服务器上得到的结果返回给客户端

2. nginx实现反向代理

  • nginx作为反向代理服务器安装在服务端,nginx的功能就是将请求转发给后面的应用服务器

  • 实现步骤

    1. 在服务端启动两个Tomcat服务器端口号分别是8080和8081

      ./bin/startup.sh 
      

      在浏览器中访问两个Tomcat,可查看到Tomcat主页面

      http://192.168.xxx.xxx:8080/
      http://192.168.xxx.xxx:8081/
      
    2. 在nginx.conf中配置反向代理服务器

      # 反向代理配置1
      upstream ramentherapy01 {
          # 用server定义HTTP地址
          server 192.168.197.128:8080;
      }
      server {
          listen       80; # 修改端口
          server_name  www.ramentherapy01.com;
      
          location / {
              # proxy可以将请求代理到对应的upstream
              proxy_pass http://ramentherapy01; # 转发的地址
              index  index.html index.htm;
          }
      }
      
      # 反向代理配置2
      upstream ramentherapy02 {
          # 用server定义HTTP地址
          server 192.168.197.128:8081;
      }
      server {
          listen       80; # 修改端口
          server_name  www.ramentherapy02.com;
      
          location / {
              # proxy可以将请求代理到对应的upstream
              proxy_pass http://ramentherapy02; # 转发的地址
              index  index.html index.htm;
          }
      }
      

      重新加载nginx配置文件

      cd /usr/local/nginx/sbin
      
      ./nginx -s reload
      
    3. 使用SwitchHosts修改hosts中域名映射配置,两个域名同时绑定一个IP

      192.168.197.128 www.ramentherapy01.com
      192.168.197.128 www.ramentherapy02.com
      

五、nginx作为负载均衡器

1. 负载均衡器概述

  • 反向代理服务器中的负载均衡器作用:将大量的请求合理地发送给集群中的不同服务器, 避免临时的网络堵塞

2. nginx实现负载均衡

  • 负载均衡策略

    • 轮询:默认策略, 每个请求按照时间顺序逐一分配到不同的服务器,如果某一个服务器下线,能自动剔除
    • 权重:可以根据服务器的实际情况调整服务器权重,权重越高分配的请求越多,权重越低,请求越少(默认都是1)
  • 实现步骤

    1. 在nginx.conf中配置反向代理服务器(默认策略是轮询)

      # 负载均衡
      upstream ramentherapy {
          # 用server定义HTTP地址
          server 192.168.197.128:8080;
          server 192.168.197.128:8081;
      }
      server {
          listen       80; # 修改端口
          server_name  www.ramentherapy.com;
      
          location / {
              # proxy可以将请求代理到对应的upstream
              proxy_pass http://ramentherapy; # 转发的地址
              index  index.html index.htm;
          }
      }
      

      在nginx.conf中配置反向代理服务器(权重)

      # 负载均衡
      upstream ramentherapy {
          # 用server定义HTTP地址
          server 192.168.197.128:8080 weight=1;
          server 192.168.197.128:8081 weight=10;
      }
      server {
          listen       80; # 修改端口
          server_name  www.ramentherapy.com;
      
          location / {
              # proxy可以将请求代理到对应的upstream
              proxy_pass http://ramentherapy; # 转发的地址
              index  index.html index.htm;
          }
      }
      
    2. 重新加载nginx配置文件

      cd /usr/local/nginx/sbin
      
      ./nginx -s reload
      
    3. 使用SwitchHosts修改hosts中域名映射配置

      192.168.197.128 www.ramentherapy.com
      
这篇关于nginx的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!