Nginx从入门到精通(笔记)

Nginx从入门到精通

一、Nginx简介

1. Nginx是什么?

​ Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器

​ Nginx可以作为一个Web服务器进行网站的发布,也可以作为反向代理进行负载均衡的实现,还可以作为邮件服务器

​ 常见的Web服务器:Tomcat、Apache、Nginx、WebLogic、Jetty、IIS等

2. 特点

​ 占用内存少,并发能力强(Nginx可处理2-3W并发连接,Apache可处理2-3K并发连接)

​ 国内使用nginx的网站:百度、新浪、网易、腾讯、淘宝、京东等

​ 参考: 官网 http://nginx.org

二、搭建Nginx环境

1. 安装nginx

​ 步骤:

  1. 下载nginx认证key文件,并添加到apt-key中

    wget http://nginx.org/keys/nginx_signing.key
    sudo apt-key add nginx_signing.key
    

    注:添加认证文件是为了让apt包管理器能够认证nginx包

  2. 配置apt源,添加nginx软件源

    编辑/etc/apt/sources.list文件,在末尾添加如下内容:

    sudo vi /etc/apt/sources.list
    	deb http://nginx.org/packages/ubuntu/ trusty nginx
    	deb-src http://nginx.org/packages/ubuntu/ trusty nginx
    
  3. 更新apt软件源,并安装nginx

    sudo apt-get update  # 更新apt软件源
    sudo apt-get install nginx  # 安装nginx
    

    注:下载的安装文件为nginx_1.14.0-1~trusty_i386.deb

  4. 访问测试

    http://ip地址

    注:nginx默认使用的端口是80

2. 目录结构

​ 执行whereis nginx查看

3. 相关命令

sudo nginx # 启动
sudo nginx -s stop # 停止
sudo nginx -s reload # 重启

ps aux | grep nginx # 查看进程信息
ps -ef | grep nginx # 查看进程信息

sudo netstat -ntpl | grep nginx

4. 关于配置文件

​ 主配置文件nginx.conf

#HTTP配置
http {
		#虚拟主机的配置
    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;
       } 
    }
}

三、HTTP服务器

1. 简介

​ 在一台服务器上搭建多个网站,每个网站对应一个Web站点,有独立的域名和目录,称为虚拟主机

​ Nginx的虚拟主机是通过server节点配置的

2. 配置

​ 步骤:

  1. 准备网站目录及测试页面

    cd ~
    mkdir -p www/ums
    echo "

    welcome to ums

    "
    > www/ums/index.html mkdir -p www/sms echo "

    welcome to sms

    "
    > www/sms/index.html
  2. 配置虚拟主机

    实现虚拟主机的三种方式:基于不同的IP、不同的端口 或 不同的域名(推荐)

    编辑配置文件vi nginx.conf

server {
listen 80;
server_name www.ums.com;

 location / {
   root   /home/soft01/www/ums;
   index  index.html index.htm;
 }

}
server {
listen 80;
server_name www.sms.com;

 location / {
   root   /home/soft01/www/sms;
   index  index.html index.htm;
 }

}


3. 配置域名解析

在客户端主机中配置域名解析,即访问网站的电脑(不是nginx服务器)

域名解析的过程:本机的hosts文件——>DNS

- Windows:C:\windows\system32\drivers\etc\hosts
- Linux/Mac:/etc/hosts

编辑域名解析文件`vi /etc/hosts`

```bash
192.168.0.121       www.ums.com  # 将域名映射到对应的服务器IP
192.168.0.121       www.sms.com
注:该方式仅是本地测试时使用,实际应用中要购买注册域名
  1. 访问测试
    http://www.ums.com

    http://www.sms.com

四、反向代理

1. 简介

  1. 正常请求

    客户端发送请求给服务器,服务器接收请求并响应数据

  2. 正向代理

    概念:位于客户端和原始服务器之间的服务器,为了从原始服务器获取数据,客户端向代理服务器发送请求并指定请求目标(原始服务器) ,然后代理服务器将请求转发给原始服务器,并将响应的数据返回给客户端

    正向代理是客户端使用的,对客户端进行代理,客户端知道并主动使用代理服务器

    作用:

    • 访问原来无法访问的资源(google、facebook等),也称为
    • 可以做缓存,加速访问资源
    • 对客户端上网进行认证授权
    • 上网行为管理,记录用户访问记录,对外隐藏用户信息,如CCProxy

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MzodsLe4-1669467452682)(assets/正向代理.png)]

  3. 反向代理

    概念:客户端发送请求到服务器(客户端认为是原始服务器,实际上是一台反向代理服务器),反向代理服务器接受请求并将请求转发给内部网络中的集群服务器,并将响应的数据返回给客户端,此时代理服务器对外就表现为一个反向代理服务器

    反向代理一般用于服务器集群、分布式部署等情况,实现负载均衡,如淘宝(使用的是封装了Nginx的Tengine)

    反向代理是为内部服务器提供代理,对客户端来说是透明的,所以称为反向代理

    作用:

    • 负载均衡,提高响应和处理速度
    • 保证内网的安全,隐藏服务器信息,防止Web攻击

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kdDq3cnN-1669467452682)(assets/反向代理.png)]

2. 配置

​ 使用Nginx作为反向代理服务器,如反向代理Tomcat

​ 步骤:

  1. 配置反向代理

    编辑配置文件vi nginx.conf

    #后台服务器列表
    upstream tomcat_server {
      server localhost:8080;  #后台服务器,可以有多个
    }
    
    server {
         listen       80;
         server_name  www.tomcat.com;
    
      	location / {
           proxy_pass http://tomcat_server; # 指定代理的后台服务器
         }
    }
    
  2. 配置域名解析

    编辑域名解析文件vi /etc/hosts

    192.168.0.121       www.tomcat.com
    
  3. 访问测试

    http://www.tomcat.com

五、负载均衡

1. 简介

​ 将接收到的请求按照一定的规则分发到不同的服务器进行处理,从而提高系统响应和处理速度,称为负载均衡

​ Nginx可以作为反向代理,实现负载均衡,此时既是反向代理服务器,也是负载均衡服务器

2. 配置

​ 步骤:

  1. 准备网站(模拟淘宝,假设有两个后台服务器)

    #拷贝两个tomcat
    cp -r apache-tomcat-8.5.30 taobao1
    cp -r apache-tomcat-8.5.30 taobao2
    #修改tomcat的端口
    vi taobao1/conf/server.xml
    	<Server port="8006">
    	<Connector port="8081">
    	<Connector port="8010">
    vi taobao2/conf/server.xml
    	<Server port="8007">
    	<Connector port="8082">	
    	<Connector port="8011"
    #修改页面	
    vi taobao1/webapps/ROOT/index.jsp
    	<h2>淘宝1</h2>
    vi taobao2/webapps/ROOT/index.jsp
    	<h2>淘宝2</h2>
    #启动tomcat
    ./taobao1/bin/startup.sh
    ./taobao2/bin/startup.sh 
    
  2. 配置负载均衡

    编辑配置文件vi nginx.conf

    #后台服务器列表
    upstream taobao_server {
      #默认按轮询方式来分发请求,平均分配
      server localhost:8081 weight=7; #weight表示权重,权重越高被分配到的几率就越大
      server localhost:8082 weight=3;
    }
    
    server {
      listen       80;
      server_name  www.taobao.com;
    
      location / {
        proxy_pass http://taobao_server; # 指定代理的后台服务器
      }
    }
    
  3. 配置域名解析

    编辑域名解析文件vi /etc/hosts

    192.168.0.121       www.taobao.com
    
  4. 访问测试

    http://www.taobao.com 多次刷新页面,查看是哪个后台服务器进行响应的

六、动静分离

1. 简介

​ 问题:tomcat在处理静态资源时效率不高,默认情况下所有资源都是由tomcat处理响应的,会导致Web应用响应慢,占用系统资源

​ 解决:将静态资源的请求交由Nginx处理,动态资源(jsp、servlet等)仍由tomcat来处理,实现动静分离

​ 实际上就是将Nginx作为静态资源服务器,通过Nginx来下载静态资源文件

​ 注:Nginx处理静态资源的能力很强,但动态处理能力不行,因此在企业中常使用动静分离技术

2. 配置

​ 步骤:

  1. 配置动静分离

    编辑配置文件vi nginx.conf

    server {
      listen       80;
      server_name  www.taobao.com;
    
      #处理动态资源
      location / {
        proxy_pass http://taobao_server; # 指定代理的后台服务器
      }
    
      #处理静态资源
      location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
        root /home/soft01/www/static;
        expires 3d; #在客户端进行缓存,缓存时间为3天
      }
    }
    
  2. 创建存放静态资源的文件夹,并将静态资源放到该目录中

    cd /home/soft01/www/
    mkdir static
    chmod 777 static  #如果报错Nginx 403 forbidden,则设置权限为777
    cd /home/soft01/taobao1/webapps/ROOT
    cp tomcat.png tomcat.css /home/soft01/www/static/
    
  3. 访问测试

    http://www.taobao.com

    此时静态资源的请求都是由Nginx进行处理响应的

七、补充(面试)

1. 高并发的处理

​ 高并发时如何优化?

  1. 负载均衡:即集群,通过多台服务器进行负载均衡,提高响应和处理速度
  2. 动静分离:使用Nginx实现、CDN
  3. 缓存:以空间换时间,提高系统效率
  4. 限流:即流量控制,将过量的请求先放到队列中,等待一定时间后再从队列中取出处理,类似于地铁限流,排队放行
  5. 降级:即服务降载,将非核心服务进行降级,暂时性的关闭,降低负载,保证核心服务的正常运行,丢卒保帅

2. 集群环境下session的处理

​ 几种解决方法:

  1. Session保持:负载均衡进行请求分发时保证每个客户端固定的访问后端的同一台服务器,如Nginx的ip_hash策略

    优点:简单,不需要对session做任何处理

    缺点:无法保证负载绝对的均衡

    ​ 缺乏容错性,如果当前访问的服务器发生故障,用户被转移到第二个服务器上时,他的session信息都将失效

  2. Session复制:将每个服务器中的Session信息复制到其它服务器节点,保证session的同步

    缺点:如果session量大的话可能会造成网络堵塞,拖慢服务器性能

  3. Session共享:将session放到一个统一的地方,一般推荐放到Memcached或Redis中

你可能感兴趣的:(笔记,nginx,linux,运维)