Nginx是一个高性能的HTTP和反向代理web服务器。占用内存少、并发能力强,Nginx专为性能优化而开发,在高连接并发的情况下,能够支持高达50000个 并发连接数响应。Nginx支持热部署,可以在不间断服务的情况下,对软件版本进行升级。

应用场景:

  1. HTTP服务器:Nginx是一个HTTP服务可以独立提供HTTP服务,可以做网页静态服务器
  2. 虚拟主机:可以实现在一台服务器虚拟出多个网站
  3. 反向代理,负载均衡:当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用Nginx做反向代理,并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况

Nginx安装和启动

Nginx官网进行下载:http://nginx.org/
需要在Linux中进行安装。如何你还没有Linux虚拟机或Linux基础看如下文件:
Linux 基础
查询MySQL的在线安装的随机密码命令:
grep password /var/log/mysqld.log 这个就是看临时密码:
image.png
alter user 'root'@'localhost' identified by 'Prim@666';

  1. 安装gcc yum install gcc-c++

如果是 yum在锁定状态中,强制关掉yum进程即可
rm -f /var/run/yum.pid

  1. 第三方的开发包, 在编译之前需要安装这些第三方包。
  • PCRE

    • nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库
      1. 安装命令:
      2. yum install -y pcre pcre-devel
  • zlib

    • nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
      1. 安装命令:
      2. yum install -y zlib zlib-devel
  • openssl

    • OpenSSL 是一个强大的安全套接字层密码库,nginx不仅支持http协议,还支持https,所以需要在linux安装openssl库。

/

  1. 安装命令:
  2. yum install -y openssl openssl-devel

安装Nginx 步骤

  1. 将Nginx的源码包上传到 Linux
  2. 解压Nginx
  1. tar -xvf nginx-1.17.8.tar
  1. 解压后进入到nginx目录,执行如下命令:执行命令 configure,生成 Mikefile 文件

    ./configure \
    --prefix=/usr/local/nginx \
    --pid-path=/var/run/nginx/nginx.pid \
    --lock-path=/var/lock/nginx.lock \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --with-http_gzip_static_module \
    --http-client-body-temp-path=/var/temp/nginx/client \
    --http-proxy-temp-path=/var/temp/nginx/proxy \
    --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
    --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
    --http-scgi-temp-path=/var/temp/nginx/scgi
    
  2. 创建临时文件目录

    mkdir /var/temp/nginx/client -p
    
  3. 执行make命令,进行编译

    make
    
  4. make 安装

    make install
    

    最终安装到了:/usr/local/nginx 目录下 cd sbin/ 执行./nginx
    nginx默认端口为:80
    image.png
    临时开放端口号命令:
    /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

    配置虚拟主机

    虚拟主机:指的是在一台服务器中,我们使用Nginx来配置多个网站。
    不同的网站:端口不同、域名不同

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

Nginx配置文件:

  1. 配置文件位置 ```shell /usr/local/nginx/conf

ngix.conf 就是Nginx的配置文件


2. 配置文件配置说明
```shell
worker_processes  1; #work的进程数,默认为1
#配置 影响nginx服务器与用户的网络连接
events {
    worker_connections  1024; #单个work 最大并发连接数
}

# http块是配置最频繁的部分 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能
http {
    # 引入mime类型定义文件
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65; # 超时时间

    #server 配置虚拟主机的相关参数 可以有多个,一个server就是一个虚拟主机
    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;
        }
    }
 # 配置新的server   
 server {
        # 监听的端口
        listen       81; 
        #监听地址
        server_name  localhost;         
        # 默认请求配置
        location / {
            root   html81; # 默认网站根目录
            index  index.html index.htm; # 欢迎页
        }
    }
}

在上述的Nginx的配置中,我们添加一个新的server 我们将html 复制一份,复制成html81

 cp -r html/ html81

重新启动Nginx

 ./nginx -s reload

开通81临时端口:
/sbin/iptables -I INPUT -p tcp --dport 81 -j ACCEPT

这样我们就可以通过nginx,配置不同的端口。

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

网站的域名一般都要通过购买域名。

域名绑定
  • 一个域名对应一个ip地址,一个ip地址可以被多个域名绑定。
  • 通过 DNS服务器去解析域名
    配置域名映射
  1. 本地测试可以修改hosts文件。修改window的hosts文件:(C:\Windows\System32\drivers\etc)
  • 可以配置域名和ip的映射关系,如果hosts文件中配置了域名和ip的对应关系,不需要走dns服务器。
配置一下nginx的映射
192.168.52.100 www.t1.com
192.168.52.100 www.t2.com

配置nginx.conf

通过域名区分虚拟主机

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

        location / {
            root   html-t1;
            index  index.html index.htm;
        }
    }

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

        location / {
            root   html-t2;
            index  index.html index.htm;
        }
    }
• 创建  html-t1和 html-t2 目录
cp -r html html-t1
cp -r html html-t2

那么这台服务器上运行着多个网站,访问不同的域名 就可访问到不同的网站内容

反向代理

什么是代理:代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介,方开始的时候,代理多数是帮助内网client访问外网server

正向代理

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

反向代理

反向代理代理的是服务器。反向代理是指用代理服务器接受客户端的请求,然后将请求转发给网站内部应用服务器,并将从服务器上得到的结果返回给客户端。
image.png
Nginx 作为反向代理服务器安装在服务端,Nginx的工程就是把请求转发给后面的应用服务器
image.png

  1. 简单的使用两个Tomcat实例,模拟两台服务器

image.png
tomcat的端口号:8080
tomcat02的端口号:8081 注意:接口开放/sbin/iptables -I INPUT -p tcp --dport 81 -j ACCEPT

  <Server port="8006" shutdown="SHUTDOWN">
  <Connector executor="tomcatThreadPool"
               port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8444" />
  </Server>

启动两台Tomcat服务器:

./bin/startup.sh

试着访问两台Tomcat服务器,是否可以访问成功.

  1. nginx 配置

    # 反向代理的配置
     upstream lagou1{
       # 用Server定义HTTP地址
     server 172.16.150.20:8080;
    }
    
    server {
         listen       80;
         server_name  www.lagou1.com;
    
         location / {
                 # 可以将我们的请求代理到 对应的upstream
             proxy_pass http://lagou1; # 转发的地址
             index  index.html index.htm;
         }
     }
    upstream lagou2{
       # 用Server定义HTTP地址
     server 172.16.150.20:8081;
    }
    
    server {
         listen       80;
         server_name  www.lagou2.com;
    
         location / {
                 # 可以将我们的请求代理到 对应的upstream
             proxy_pass http://lagou2; # 转发的地址
             index  index.html index.htm;
         }
     }
    
  2. 配置host 在host文件中添加虚拟机对应的IP地址

    172.16.150.20 www.lagou1.com
    172.16.150.20 www.lagou2.com
    

    然后访问 www.lagou2.com 会访问tomcat2的资源
    访问www.lagou1.com 会访问tomcat的资源

    负载均衡

    当多个请求发送过来的时候,发送给不同的服务器。 当一个请求发送过来的时候,Nginx作为反向代理服务器,会根据请求找到后面的目标服务器去处理请求,这就是反向代理. 那么, 如果目标服务器有多台的话,找哪一个服务器去处理当前请求呢 ? 这个合理分配请求到服务器的过程就叫做负载均衡. 当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展, 负载均衡主要是为了分担访问量,将请求合理分发给不同的服务器, 避免临时的网络堵塞

image.png
负载均衡策略:

  1. 轮询 默认策略,每个请求按照时间顺序逐一分配到不同的服务器,如果某一个服务器下线,能自动剔除

先配置反向代理,在配置负载均衡策略

    upstream lagouedu{
      # 用Server定义HTTP地址 定义多个server
    server 172.16.150.20:8081;
    server 172.16.150.20:8080;
  }

   server {
        listen       80;
        server_name  www.lagouedu.com;
        location / {
                # 可以将我们的请求代理到 对应的upstream
            proxy_pass http://lagouedu; # 转发的地址
            index  index.html index.htm;
        }
    }
  1. weight

可以根据服务器的实际情况调整服务器权重,权重越高分配的请求越多,权重越低,请求越少,默认都是1. 一般情况下,企业多台服务器每台服务器的配置不一样,我们想要配置高的服务器,多接受一些请求,这就需要用到weight,weight越大权重越高

    upstream lagouedu{
      # 用Server定义HTTP地址 定义多个server
    server 172.16.150.20:8081 weight=1;
    server 172.16.150.20:8080 weight=10;
  }

异常处理

  1. 报错:nginx.pid failed 这是没有修改pid的路径,编辑nginx.conf,修改pid /usr/local/nginx/logs/nginx.pid;
  2. unknown directive ngx_fastdfs_module in nginx.conf88

这个错误时使用nginx导入fastDFS的问题导致的,由于之前安装nginx,没有安装fastDFS模块,需要重新安装即可:

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/opt/fastdfs-nginx-module/src

然后执行make make install 重启nginx即可访问fastDFS