Nginx学习总结

本文详细介绍了Nginx的安装、常用命令、配置以及多种应用场景,包括作为HTTP服务器、虚拟主机(端口和IP绑定)、反向代理和负载均衡。通过实例演示了如何配置静态资源、实现虚拟主机和动静分离,并探讨了负载均衡的常见算法。此外,还讲解了如何通过Nginx实现反向代理以负载均衡两个Tomcat实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

Nginx简介

Nginx应⽤场景

Nginx 安装

Nginx常用命令

Nginx配置

Nginx的应用场景

http 服务器

虚拟主机

虚拟主机是什么

端口绑定

IP绑定

反向代理和负载均衡

什么是反向代理

反向代理案例

什么是负载均衡

Nginx配置负载均衡

动静分离

Nginx配置静态资源

参考文章


Nginx简介

Nginx 是⼀款⾼性能的 http 服务器/反向代理服务器及电⼦邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师伊戈尔·赛索耶夫所开发,官⽅测试 nginx 能够⽀撑 5 万并发链接,并且cpu、内存等资源消耗却⾮常低,运⾏⾮常稳定。

Nginx应⽤场景

  1. http 服务器。Nginx 是⼀个 http 服务可以独⽴提供 http 服务。可以做⽹⻚静态服务器。

  2. 虚拟主机。可以实现在⼀台服务器虚拟出多个⽹站。例如个⼈⽹站使⽤的虚拟主机。

  3. 反向代理,负载均衡。当⽹站的访问量达到⼀定程度后,单台服务器不能满⾜⽤户的请求时,需要⽤多台服务器集群可以使⽤ nginx 做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载⾼宕机⽽某台服务器闲置的情况。

  4. 动静分离

Nginx 安装

Linux centOS 7.x为例,使用 yum 安装 Nginx

yum install nginx -y

安装完成后,通过 rpm -ql nginx 命令查看 Nginx 的安装信息:

# Nginx配置文件
/etc/nginx/nginx.conf # nginx 主配置文件
/etc/nginx/nginx.conf.default
​
​
# 可执行程序文件
/usr/bin/nginx-upgrade
/usr/sbin/nginx
​
# nginx库文件
/usr/lib/systemd/system/nginx.service # 用于配置系统守护进程
/usr/lib64/nginx/modules # Nginx模块目录
​
# 帮助文档
/usr/share/doc/nginx-1.16.1
/usr/share/doc/nginx-1.16.1/CHANGES
/usr/share/doc/nginx-1.16.1/README
/usr/share/doc/nginx-1.16.1/README.dynamic
/usr/share/doc/nginx-1.16.1/UPGRADE-NOTES-1.6-to-1.10
​
# 静态资源目录
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
​
# 存放Nginx日志文件
/var/log/nginx

主要关注的文件夹有两个:

  1. /etc/nginx/conf.d/ 是子配置项存放处, /etc/nginx/nginx.conf 主配置文件会默认把这个文件夹中所有子配置项都引入;

  2. /usr/share/nginx/html/ 静态文件都放在这个文件夹,也可以根据你自己的习惯放在其他地方;

如果提示“没有可用软件包 nginx”,则运行sudo yum install epel-release安装epel包后重新安装即可,出现该问题的原因是nginx并不在centos官方yum源中,而epel源可以为“红帽系”的操作系统提供额外的软件包

Nginx常用命令

Nginx 应用程序命令:

nginx #启动Nginx
nginx -s reload  # 向主进程发送信号,重新加载配置文件,热重启
nginx -s reopen   # 重启 Nginx
nginx -s stop    # 快速关闭
nginx -s quit    # 等待工作进程处理完成后关闭
nginx -T         # 查看当前 Nginx 最终的配置
nginx -t         # 检查配置是否有问题

Nginx配置

Nginx 的主配置示例:

# main段配置信息
user  nginx;                        # 运行用户,默认即是nginx,可以不进行设置
worker_processes  auto;             # Nginx 进程数,一般设置为和 CPU 核数一样
error_log  /var/log/nginx/error.log warn;   # Nginx 的错误日志存放目录
pid        /var/run/nginx.pid;      # Nginx 服务启动时的 pid 存放位置
​
# events段配置信息
events {
    use epoll;     # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
    worker_connections 1024;   # 每个进程允许最大并发数
}
​
# http段配置信息
# 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http { 
    # 设置日志模式
    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  /var/log/nginx/access.log  main;   # Nginx访问日志存放位置
​
    sendfile            on;   # 开启高效传输模式
    tcp_nopush          on;   # 减少网络报文段的数量
    tcp_nodelay         on;
    keepalive_timeout   65;   # 保持连接的时间,也叫超时时间,单位秒
    types_hash_max_size 2048;
​
    include             /etc/nginx/mime.types;      # 文件扩展名与类型映射表
    default_type        application/octet-stream;   # 默认文件类型
​
    include /etc/nginx/conf.d/*.conf;   # 加载子配置项
    
    # server段配置信息
    server {
      listen       80;       # 配置监听的端口
      server_name  localhost;    # 配置的域名
      
      # location段配置信息
      location / {
        root   /usr/share/nginx/html;  # 网站根目录
        index  index.html index.htm;   # 默认首页文件
        deny 172.168.22.11;   # 禁止访问的ip地址,可以为all
        allow 172.168.33.44;# 允许访问的ip地址,可以为all
      }
      
      error_page 500 502 503 504 /50x.html;  # 默认50x对应的访问页面
      error_page 400 404 error.html;   # 同上
    }
}
​
  • main 全局配置,对全局生效;

  • events 配置影响 Nginx 服务器与用户的网络连接;

  • http 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;

  • server 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;

  • location 用于配置匹配的 uri ;

  • upstream 配置后端服务器具体地址,负载均衡配置不可或缺的部分;

Nginx的应用场景

http 服务器

  1. 在 /etc/nginx/conf.d目录下添加子配置文件 80.conf

    server {
     listen 80; # 监听的端⼝
     server_name localhost; # 域名或ip
     location / { # 访问路径配置
       root /usr/share/nginx/html;# 根⽬录
       index index.html index.htm; # 默认⾸⻚
     }
     error_page 500 502 503 504 /50x.html; # 错误⻚⾯
     location = /50x.html {
       root html;
     }
    }
  2. 进入/user/share/nginx/html目录下,修改或创建index.html文件

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <title>Welcome to Nginx</title>
    </head>
    ​
    <body>
      <h1>Hello,Nginx<h1>
    </body>
    </html>
  3. 重启 Nginx

  4. 访问你安装 Nginx 机器的ip:80,例如:192.168.137.5:80,显示如下页面

虚拟主机

虚拟主机是什么

虚拟主机,也叫“⽹站空间”,就是把⼀台运⾏在互联⽹上的物理服务器划分成多个“虚拟”服务器。虚拟主机技术极⼤的促进了⽹络技术的应⽤和普及。同时虚拟主机的租⽤服务也成了⽹络时代的⼀种新型经济形式。

虚拟主机有两种绑定方式:

  1. 通过端口绑定:即不同端口访问不同虚拟主机

  2. 通过IP绑定:通过不同IP访问不同虚拟主机

端口绑定

  1. 编写静态网站文件

  2. 进入/user/share/nginx/html目录下,创建index文件夹

    mkdir index
    cd index
    vi index.html
  3. 进入/user/share/nginx/html目录下,创建regist文件夹

    mkdir regist
    cd regist
    vi regist.html
  4. 编写regist.html文件

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <title>regist</title>
    </head>
    
    <body>
      <h1>regist page<h1>
    </body>
    </html>
  5. /etc/nginx/conf.d目录下添加子配置文件 port.conf

    server {
       listen 81; # 监听的端⼝
       server_name localhost; # 域名或ip
       location / { # 访问路径配置
         root /usr/share/nginx/html/index;# 根⽬录
         index index.html index.htm; # 默认⾸⻚
       }
       error_page 500 502 503 504 /50x.html; # 错误⻚⾯
       location = /50x.html {
         root html;
       }
    }
    server {
       listen 82; # 监听的端⼝
       server_name localhost; # 域名或ip
       location / { # 访问路径配置
         root /usr/share/nginx/html/regist;# 根⽬录
         index regist.html; # 默认⾸⻚
       }
       error_page 500 502 503 504 /50x.html; # 错误⻚⾯
       location = /50x.html {
         root html;
       }
     }

  6. 重启 nginx -s reload访问 192.168.137.5:81显示页面如下:

  7. 访问 192.168.137.5:82显示页面如下:

     

IP绑定

本地测试可以修改 hosts ⽂件(C:\Windows\System32\drivers\etc),在 hosts 文件中可以配置域名和 ip 的映射关系,如果 hosts ⽂件中配置了域名和 ip 的对应关系,则不需要⾛ dns 服务器。

  1. 在测试机器(即浏览器所在机器)上的 hosts 文件末尾添加两行:

    192.168.137.5 www.fgba.com
    192.168.137.5 regist.fgba.com
  2. /etc/nginx/conf.d目录下添加子配置文件 ip.conf

    server {
     listen 80;
     server_name www.fgba.com;
     location / {
       root /usr/share/nginx/html/index;
       index index.html index.htm;
     }
    }
    server {
     listen 80;
     server_name regist.fgba.com;
     location / {
       root /usr/share/nginx/html/regist;
       index regist.html;
     }
    }
  3. 重启 Nginx

  4. 访问 www.fgba.com,显示如下:

  5. 访问 regist.fgba.com,显示如下:

反向代理和负载均衡

什么是反向代理

反向代理(Reverse Proxy)⽅式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内 部⽹络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器 对外就表现为⼀个反向代理服务器。

⾸先我们先理解正向代理,如下图:

正向代理是针对你的客户端,⽽反向代理是针对服务器的,如下图:

反向代理案例

Tomcat安装

须先安装jdk,未安装jdk可执行命令安装:

yum install -y java-1.8.0-openjdk
  1. 官网下载tar.gz:Apache Tomcat® - Welcome!

  2. 在Linux中解压下载的压缩包:

    tar -xzvf apache-tomcat-9.0.56.tar.gz 

    重命名解压后的文件:

    mv apache-tomcat-9.0.56 tomcat9-8081

    修改端口号:

    cd tomcat9-8081/conf
    vi server.xml

    找到以下位置

    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />

    修改为

    <Connector port="8081" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />

    保存退出后,启动Tomcat服务

    cd ..
    cd bin
    ./startup.sh

    查询是否启动成功:

    ps -ef|grep java

  3. 再次解压,操作同上,将端口号修改为8082即可。

    tar -xzvf apache-tomcat-9.0.56.tar.gz
  4. 注意:在其中一个server.xml文件,修改如下位置

    <!-- 将原来的8005端口修改为8085 -->
    <Server port="8085" shutdown="SHUTDOWN">
    <!-- 将原来的8009端口修改为8089 -->
    <Connector port="8089" protocol="AJP/1.3" redirectPort="8443" />
  5. 以下界面说明已运行成功 

编写页面

  • 进入 tomcat9-8081 的 webapps 目录
cd /usr/local/tomcat9-8081/webapps
mkdir index
cd index
vi index.html
<!DOCTYPE html>
<html lang="en">
<head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/9.0.56 8081</title>
</head>
<body>
  <h1>This is a Tomcat.port is 8081</h1>
</body>
</html>
  • 进入tomcat9-8082的webapps目录
cd /usr/local/tomcat9-8082/webapps
mkdir index
cd index
vi index.html
<!DOCTYPE html>
<html lang="en">
<head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/9.0.56 8082</title>
</head>
<body>
  <h1>This is a Tomcat.port is 8082</h1>
</body>
</html>

配置Nginx反向代理

  • /etc/nginx/conf.d目录下添加子配置文件 proxy.conf
upstream tomcat-fgba{
 server 192.168.137.5:8081;
}
server {
 listen 80; # 监听的端⼝
 server_name www.fgba.cn; # 域名或ip
 location / { # 访问路径配置
   # root index;# 根⽬录
   proxy_pass http://tomcat-fgba;
   index index.html index.htm; # 默认⾸⻚
 }
}
  • 重启 Nginx
  • 配置本地 hosts 文件
192.168.137.5 www.fgba.lb.cn

什么是负载均衡

负载均衡是建⽴在现有⽹络结构之上,它提供了⼀种廉价有效透明的⽅法扩展⽹络设备和服务器的带宽、增加吞吐量、加强⽹络数据处理能⼒、提⾼⽹络的灵活性和可⽤性。 负载均衡,英⽂名称为 Load Balance,其意思就是分摊到多个操作单元上进⾏执⾏,例如 Web 服务器、FTP 服务器、企业关键应⽤服务器和其它关键任务服务器等,从⽽共同完成⼯作任务。

Nginx配置负载均衡

  • /etc/nginx/conf.d目录下添加子配置文件 lb.conf
    upstream tomcat-fgba-lb{
     server 192.168.137.5:8081;
     server 192.168.137.5:8082;
    }
    server {
     listen 80; # 监听的端⼝
     server_name www.fgba.lb.cn; # 域名或ip
     location / { # 访问路径配置
       # root index;# 根⽬录
       proxy_pass http://tomcat-fgba-lb;
       index index.html index.htm; # 默认⾸⻚
     }
    }

  • 重启Nginx
  • 配置本地hosts文件
    192.168.137.5 www.fgba.lb.cn

  • 访问多次页面,http://www.fgba.lb.cn/index/index.html

常用负载均衡算法

  • 轮询(默认)

注意:这里的轮询并不是每个请求轮流分配到不同的后端服务器,与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下 。如果后端服务器down掉,将自动剔除

  • 权重

每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况

修改 /etc/nginx/conf.d目录下子配置文件 lb.conf

upstream tomcat-fgba-lb{
 server 192.168.137.5:8081 weight=5;
 server 192.168.137.5:8082 weight=2;
}
server {
 listen 80; # 监听的端⼝
 server_name www.fgba.lb.cn; # 域名或ip
 location / { # 访问路径配置
   # root index;# 根⽬录
   proxy_pass http://tomcat-fgba-lb;
   index index.html index.htm; # 默认⾸⻚
 }
}
  • ip_hash

ip_hash 也叫 IP 绑定,每个请求按访问 ip 的 hash 值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话 Session 丢失的问题

修改 /etc/nginx/conf.d目录下子配置文件 lb.conf

upstream tomcat-fgba-lb{
 ip_hash;
 server 192.168.137.5:8081;
 server 192.168.137.5:8082;
}
server {
 listen 80; # 监听的端⼝
 server_name www.fgba.lb.cn; # 域名或ip
 location / { # 访问路径配置
   # root index;# 根⽬录
   proxy_pass http://tomcat-fgba-lb;
   index index.html index.htm; # 默认⾸⻚
 }
}
  • 最少连接

web请求会被转发到连接数最少的服务器上

修改 /etc/nginx/conf.d目录下子配置文件 lb.conf

upstream tomcat-fgba-lb {
 least_conn;
 server 192.168.137.5:8081;
 server 192.168.137.5:8082;
}
server {
 listen 80; # 监听的端⼝
 server_name www.fgba.lb.cn; # 域名或ip
 location / { # 访问路径配置
   # root index;# 根⽬录
   proxy_pass http://tomcat-fgba-lb;
   index index.html index.htm; # 默认⾸⻚
 }
}
  • 其他配置

        配置1

upstream tomcat-fgba-lb { 
  server 192.168.137.5:8081;
  #其它所有的非backup机器down(宕机)的时候,才请求backup机器
  server 192.168.137.5:8082;
} 

        配置2

upstream tomcat-fgba-lb { 
  server 192.168.137.5:8081;
  #down表示当前的server是down状态,不参与负载均衡
  server 192.168.137.5:8082;
} 

动静分离

动静分离是指在 web 服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提示整个服务的访问性和可维护性。

一般来说,都需要将动态资源和静态资源分开,由于 Nginx 的高并发和静态资源缓存等特性,经常将静态资源部署在 Nginx 上。如果请求的是静态资源,直接到静态资源目录获取资源,如果是动态资源的请求,则利用反向代理的原理,把请求转发给对应后台应用去处理,从而实现动静分离。

使用前后端分离后,可以很大程度提升静态资源的访问速度,即使动态服务不可用,静态资源的访问也不会受到影响。

Nginx 配置静态资源

当访问静态资源,则从 linux 服务器 /opt/nginx/static 目录下获取

  • 修改 /etc/nginx/conf.d目录下子配置文件 lb.conf
upstream tomcat-fgba-lb{
  least_conn;
  server 192.168.137.5:8081;
  server 192.168.137.5:8082;
}
server {
  listen 80; # 监听的端⼝
  server_name www.fgba.lb.cn; # 域名或ip
  location / { # 访问路径配置
    # root index;# 根⽬录
    proxy_pass http://tomcat-fgba-lb;
    index index.html index.htm; # 默认⾸⻚
  }
  #拦截以下后缀名的静态资源
  location ~.*\.(js|css|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
    root /opt/nginx/static;
  }
}

说明

  • ~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配

  • 第一个点 . 表示任意字符

  • *表示一个或多个字符

  • . 是转义字符,是后面这个点的转义字符

  • | 表示或者

  • $ 表示结尾

  • 整个配置表示以 .后面括号里面的这些后缀结尾的文件都由 nginx 处理

放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限;否则会出现403错误 ,chmod 755 /opt/nginx/static

  • 编写 /usr/local/tomcat9-8081/webapps/index/index.html 页面
<!DOCTYPE html>
<html lang="en">
<head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/9.0.56 8081</title>
</head>
<body>
  <h1>This is a Tomcat.port is 8081</h1>
  <img src="/1.png" />
</body>
</html>
  • 编写 /usr/local/tomcat9-8082/webapps/index/index.html 页面
<!DOCTYPE html>
<html lang="en">
<head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/9.0.56 8082</title>
</head>
<body>
  <h1>This is a Tomcat.port is 8082</h1>
  <img src="/1.png" />
</body>
</html>
  • 先访问一下

  • 可以看到页面中未能显示
  • 1.png放入 /opt/nginx/static 路径下 
  • 刷新页面

  • 图片成功显示

参考文章

  1. 《万字总结,体系化带你全面认识 Nginx !》 作者:Lion 链接:万字总结,体系化带你全面认识 Nginx ! - 掘金 来源:稀土掘金

  2. 《yum 在线安装 nginx》 作者:萌萌丶小魔王 链接:yum 在线安装 nginx - 萌萌丶小魔王 - 博客园 来源:博客园

  3. 《CentOS在线安装JDK》 作者:名山丶深处 链接:CentOS在线安装JDK - 名山丶深处 - 博客园 来源:博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值