GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

软件开发 --- Nginx 之初体验

好的,我用口语来解释一下 Nginx 可以做的几种常见功能,想让你更清楚它的用途。

1. 反向代理

Nginx 就像是一个中介,当用户访问你的网站时,它会接收请求,然后把这些请求转发到后端的应用服务器,最后再把响应返回给用户。
比如你有两个应用,一个负责处理用户登录,另一个处理数据存取,Nginx 就会根据请求的不同,转发到不同的服务器。就像一个门卫,判断来访者的需求,把他们分发到对应的部门。

2. 负载均衡

假设你有好几个相同的服务器,Nginx 会把用户的请求平均分配到这些服务器上,避免某一台服务器过载。
想象一下,一个餐厅的服务员,每当有顾客进门时,服务员会把他们分配到不同的桌子上,确保每个桌子都有顾客,但没人有过多的压力。

3. 静态资源服务器

Nginx 非常适合用来直接提供静态文件(比如图片、CSS 文件、JavaScript 脚本、HTML 页面等)。如果你做前端开发,把前端的文件放到 Nginx 上,用户访问时,Nginx 会直接把这些文件传送给用户。
比如,你的网页上的图片和样式文件就可以通过 Nginx 来加载,效率很高,因为它是专门做这种事情的。

4. API 网关

如果你有多个微服务,Nginx 可以充当一个“API 网关”,接收所有的 API 请求,然后转发到具体的微服务上。
就像一个快递站,所有的包裹都先到这个站,然后再根据地址分发到不同的目的地。

5. SSL 终结

SSL(加密)就是让网站变得更安全,Nginx 可以处理 SSL 加密和解密的工作。你可以让 Nginx 在前面接收加密的请求,然后转发给后端服务器时,已经是解密后的请求。
简单来说,Nginx 做的是加密和解密的“中介”,后端服务器就不用再处理复杂的加密解密工作了。

6. HTTP 缓存

Nginx 可以缓存你网站的部分内容,这样当有多个用户访问相同的内容时,Nginx 可以直接从缓存中获取,而不必每次都请求后端服务器。这可以大大提高网站的访问速度。
就像你把常用的东西放在了桌子上,别人需要的时候可以直接拿,而不是每次都去找。

7. WebSocket 代理

WebSocket 是一种可以实现长连接的协议,Nginx 也可以用来代理 WebSocket 请求,保证前后端可以保持持久连接。这对于即时通讯或者实时数据推送非常有用。
就像你和一个人聊得很开心,通过一个常开着的电话线,不需要每次拨号就能继续对话。

8. 请求过滤与安全

Nginx 可以设置规则,过滤掉恶意请求,比如防止 SQL 注入、XSS 攻击等。它就像是一个守门员,拦截掉那些可疑的请求,确保只有合法的用户能进入。
例如,如果检测到某个请求包含恶意脚本,Nginx 会直接拒绝它。

9. 重定向和 URL 重写

Nginx 可以帮助你将用户请求的 URL 重定向到其他地方,或者重写 URL。例如,你可以把 http://example.com/old-page 自动重定向到 http://example.com/new-page
就像你搬家了,把原来地址的信件转发到新地址,保证别人不会迷路。

10. 多域名和虚拟主机支持

Nginx 可以根据请求的域名来决定将请求转发到哪个服务器。你可以在一台服务器上托管多个网站,Nginx 根据访问的域名,知道该把请求交给哪个网站的服务。
就像一个大楼里有多个办公室,Nginx 就是负责判断哪个来访者应该进入哪个办公室的保安。

11. 限流与防止DDoS攻击

Nginx 可以设置请求频率限制,防止某个用户或 IP 短时间内发起过多请求,这样可以避免 DDoS(分布式拒绝服务)攻击。
就像你在餐厅里限制每个顾客只能点两道菜,这样就不会有一个人点很多菜造成厨房拥堵。

总结

Nginx 是一个非常强大的工具,它可以用来做很多事情,不仅仅是简单的网页服务器。无论是反向代理、负载均衡,还是提供静态资源、API 网关、SSL 终结等,它都能提供高效稳定的服务。你可以把它想象成一个多功能的中介,处理请求、转发数据、提高性能,甚至增强安全性。

 

好的,再给你举一个 Nginx 的常见使用场景:Nginx 作为静态资源服务器。这个场景非常常见,尤其是前后端分离的架构中,前端的静态资源(HTML、CSS、JavaScript、图片等)通常由 Nginx 来提供,而后端 API 则由其他应用服务器提供。

场景:Nginx 提供静态资源服务

假设你有一个前端项目,所有的静态资源都打包在一个 dist 目录下,接下来你希望通过 Nginx 来提供这些静态资源,用户访问你的站点时,Nginx 会直接返回这些文件。

步骤 1:安装 Nginx

和前面的步骤一样,首先需要安装 Nginx。

  • 在 Ubuntu 上安装 Nginx

    sudo apt update
    sudo apt install nginx
    
  • 在 CentOS 上安装 Nginx

    sudo yum install epel-release
    sudo yum install nginx
    
  • 启动 Nginx 服务

    sudo systemctl start nginx
    sudo systemctl enable nginx
    

步骤 2:配置 Nginx 提供静态资源

  1. 打开 Nginx 配置文件进行编辑:

    sudo nano /etc/nginx/sites-available/default
    
  2. server 块中,配置静态资源路径,指向你的前端静态资源目录。例如,假设前端资源存放在 /var/www/html/dist 目录下:

    配置示例

    server {
        listen 80;
    
        # 你的站点域名或者 IP 地址
        server_name example.com;
    
        # 静态资源路径配置
        location / {
            root /var/www/html/dist;  # 静态资源所在目录
            try_files $uri $uri/ /index.html;  # 如果请求的资源不存在,返回 index.html,适用于单页应用(SPA)
        }
    
        # 可以配置其他 API 路径代理到后端应用
        location /api/ {
            proxy_pass http://localhost:3000;  # 后端应用的 API 地址
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
    • root /var/www/html/dist;:指定静态文件所在的路径。
    • try_files $uri $uri/ /index.html;:这行配置非常关键,主要用于单页面应用(SPA)。如果用户请求的文件不存在,Nginx 会返回 index.html,这可以帮助前端路由处理单页面应用的路由。
  3. 保存并退出编辑器。

步骤 3:配置前端项目

假设你用 Vue.jsReact 这样的前端框架开发的应用,并且已经执行了 npm run build 生成了静态文件。这些静态文件会被保存在 dist/build/ 目录中。

将这些文件复制到 Nginx 配置的静态资源目录中:

cp -r /path/to/your/frontend/dist/* /var/www/html/dist/

步骤 4:重新加载 Nginx 配置

修改完配置后,需要重新加载 Nginx,使新的配置生效:

sudo systemctl reload nginx

步骤 5:访问网站

现在,你可以通过浏览器访问你的站点(例如 http://example.com)。Nginx 会返回你存放在 /var/www/html/dist 中的静态资源文件,浏览器会加载这些文件并渲染页面。

步骤 6:调试与监控

  1. 查看访问日志

    如果你想检查请求的处理情况,可以查看 Nginx 的 访问日志

    tail -f /var/log/nginx/access.log
    

    你将看到每一个请求的详细信息,包括请求的 URL 和处理时间等。

  2. 查看错误日志

    如果出现问题,可以查看 错误日志 来排查问题:

    tail -f /var/log/nginx/error.log
    

    错误日志可以帮助你定位静态文件未找到或其他配置问题。

步骤 7:使用 HTTPS(可选)

如果你希望为你的静态资源启用 HTTPS,可以使用 Let’s Encrypt 免费证书。

  1. 安装 Certbot 工具来获取证书:

    sudo apt install certbot python3-certbot-nginx
    
  2. 获取并安装证书:

    sudo certbot --nginx -d example.com
    

    这会自动配置 Nginx 来使用 HTTPS 并重定向所有 HTTP 请求到 HTTPS。

  3. 自动续期证书:

    sudo certbot renew --dry-run
    

总结

这个例子展示了如何使用 Nginx 提供静态资源服务。通过将前端打包后的静态资源放到 Nginx 的静态目录下,Nginx 可以高效地处理这些资源的请求,并通过反向代理转发 API 请求到后端应用。这个方案非常适合前后端分离的项目,同时 Nginx 作为静态资源服务器也有很高的性能优势。

 

Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个流行的负载均衡器和 HTTP 缓存。它通常被用来为 Web 应用提供高效的服务,特别是在需要高并发访问的场景中。

以下是一个常见的 Nginx 使用场景示例,展示如何在实际环境中配置和使用 Nginx:

场景:部署一个简单的 Web 应用并使用 Nginx 作为反向代理服务器

假设你有一个 Web 应用,它运行在 localhost:3000(可能是一个 Node.js、Django、Flask 或其他 Web 应用),并且你想要通过 Nginx 作为反向代理来提供该 Web 应用的服务,并且希望使其能够通过端口 80(HTTP)进行访问。

步骤 1:安装 Nginx

  1. 在 Ubuntu 上安装 Nginx

    sudo apt update
    sudo apt install nginx
    
  2. 在 CentOS 上安装 Nginx

    sudo yum install epel-release
    sudo yum install nginx
    
  3. 启动 Nginx

    安装完成后,你可以启动 Nginx 服务:

    sudo systemctl start nginx
    

    并设置 Nginx 开机自动启动:

    sudo systemctl enable nginx
    
  4. 检查 Nginx 是否正常运行

    打开浏览器,访问 http://localhost/ 或服务器的 IP 地址。如果看到 Nginx 的欢迎页面,说明安装成功。

步骤 2:配置 Nginx 作为反向代理

  1. 编辑 Nginx 配置文件

    默认情况下,Nginx 的配置文件位于 /etc/nginx/nginx.conf,或者对于某些发行版,虚拟主机配置文件可能位于 /etc/nginx/sites-available/default/etc/nginx/conf.d/default.conf

    这里,我们将使用默认的配置文件进行修改。在文件中配置反向代理规则,将请求转发到你的 Web 应用(假设运行在 localhost:3000)。

    打开配置文件:

    sudo nano /etc/nginx/sites-available/default
    
  2. 配置反向代理

    server 块内,修改或添加以下内容:

    server {
        listen 80;  # 监听 HTTP 默认端口
        server_name example.com;  # 你的网站域名或服务器的 IP 地址
    
        location / {
            proxy_pass http://localhost:3000;  # 将请求转发到本地的 Web 应用(localhost:3000)
            proxy_set_header Host $host;  # 保持原始请求头
            proxy_set_header X-Real-IP $remote_addr;  # 获取客户端的真实 IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 保持原始的请求头
            proxy_set_header X-Forwarded-Proto $scheme;  # 保持原始协议(http 或 https)
        }
    
        # 可选:配置错误页面
        error_page  500 502 503 504  /50x.html;
        location = /50x.html {
            root /usr/share/nginx/html;
        }
    }
    

    这里的配置主要做了以下几件事情:

    • listen 80;:让 Nginx 监听 HTTP 的 80 端口。
    • proxy_pass http://localhost:3000;:将客户端发往 Nginx 的请求转发到本地运行的 Web 应用(比如一个 Node.js 应用)上,假设它在端口 3000 上运行。
    • proxy_set_header:这几行代码确保转发的请求包含正确的头信息(比如客户端的真实 IP 地址等),以便后端应用能正确处理请求。
  3. 保存并退出编辑器(按 Ctrl + O 保存,按 Ctrl + X 退出)。

  4. 重新加载 Nginx 配置

    配置修改后需要重新加载 Nginx,使新的配置生效:

    sudo systemctl reload nginx
    

步骤 3:启动 Web 应用

确保你的 Web 应用正在运行,并监听 localhost:3000。例如,如果你的应用是一个 Node.js 应用,可以通过以下命令启动它:

node app.js

步骤 4:访问 Web 应用

现在,你可以通过浏览器访问 http://localhost(或者你配置的域名,如 http://example.com)。Nginx 会将请求转发到 localhost:3000,并返回 Web 应用的响应。

步骤 5:检查 Nginx 日志(调试)

如果遇到任何问题,可以查看 Nginx 的访问日志和错误日志来进行调试:

  • 访问日志/var/log/nginx/access.log
  • 错误日志/var/log/nginx/error.log

使用以下命令查看日志内容:

tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log

Nginx 其他常见用法:

  1. 负载均衡

    Nginx 还可以用作负载均衡器,将流量分发到多个后端应用服务器。你可以在配置文件中添加多个 proxy_pass 地址:

    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }
    
    server {
        location / {
            proxy_pass http://backend;
        }
    }
    
  2. HTTPS 配置

    Nginx 可以配置为处理 SSL/TLS 加密流量,支持 HTTPS 协议。你需要配置 SSL 证书并更新 Nginx 配置:

    server {
        listen 443 ssl;
        server_name example.com;
    
        ssl_certificate /etc/ssl/certs/example.com.crt;
        ssl_certificate_key /etc/ssl/private/example.com.key;
    
        location / {
            proxy_pass http://localhost:3000;
        }
    }
    
  3. URL 重写与重定向

    Nginx 还支持 URL 重写和重定向功能。你可以通过配置 rewrite 指令来实现。

    例如:将 http://example.com/oldpage 重定向到 http://example.com/newpage

    server {
        location /oldpage {
            return 301 http://example.com/newpage;
        }
    }
    
  4. 缓存静态文件

    Nginx 可以通过配置缓存来加速静态文件的加载。比如,缓存图片、CSS、JavaScript 文件,减少 Web 应用服务器的压力。

    server {
        location /static/ {
            root /var/www/html;
            expires 30d;
            add_header Cache-Control public;
        }
    }
    

    这里的配置会将 /static/ 路径下的文件缓存 30 天。

总结

Nginx 是一个功能强大的 Web 服务器和反向代理服务器,可以用于多种场景,包括负载均衡、SSL/TLS 加密、静态文件缓存等。它的高性能和灵活配置使其成为现代 Web 应用架构中不可或缺的一部分。

 

 

 

好的,再举一个 Nginx 使用的例子,这次我们用 Nginx 做反向代理 + 负载均衡 的场景。假设你有多个应用服务器(比如两个 Node.js 应用),Nginx 可以将请求均衡地分发给这些服务器,以保证高可用性和流量的均衡分配。

场景:使用 Nginx 做负载均衡

假设我们有两个 Node.js 应用,它们分别部署在两台机器上:

  • Node.js 应用 1192.168.1.2:3000
  • Node.js 应用 2192.168.1.3:3000

我们希望通过 Nginx 实现负载均衡,将流量均匀地分配到这两台机器上。

步骤 1:安装 Nginx

安装方法与之前相同,首先安装并启动 Nginx 服务。

  • 在 Ubuntu 上安装 Nginx

    sudo apt update
    sudo apt install nginx
    
  • 在 CentOS 上安装 Nginx

    sudo yum install epel-release
    sudo yum install nginx
    
  • 启动 Nginx 服务

    sudo systemctl start nginx
    sudo systemctl enable nginx
    

步骤 2:配置 Nginx 做负载均衡

  1. 打开 Nginx 配置文件进行编辑:

    sudo nano /etc/nginx/nginx.conf
    
  2. 配置负载均衡,在 http 块中添加一个 upstream 指令来定义负载均衡的服务器池,然后在 server 块中指定反向代理规则。

    配置示例

    http {
        upstream myapp {
            # 负载均衡的服务器池
            server 192.168.1.2:3000;  # Node.js 应用 1
            server 192.168.1.3:3000;  # Node.js 应用 2
        }
    
        server {
            listen 80;  # 监听 HTTP 请求
    
            server_name example.com;  # 你的域名或 IP 地址
    
            location / {
                proxy_pass http://myapp;  # 将请求转发到 upstream 服务器池
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
            }
        }
    }
    

    这里的配置做了以下几件事:

    • 定义了一个 upstream 服务器池 myapp,它包含了两个 Node.js 应用服务器,分别是 192.168.1.2:3000192.168.1.3:3000
    • server 块中,配置了一个 location /,将客户端的 HTTP 请求通过 proxy_pass 转发到 upstream 服务器池(也就是两个 Node.js 应用)。
    • 通过 proxy_set_header 配置了转发请求时的头部信息,确保后端应用能够获取到客户端的真实 IP 和协议等信息。
  3. 保存并退出编辑器(Ctrl + O 保存,Ctrl + X 退出)。

步骤 3:重新加载 Nginx 配置

每次修改配置文件后,需要重新加载 Nginx 使配置生效:

sudo systemctl reload nginx

步骤 4:启动 Node.js 应用

确保你的 Node.js 应用在两台机器上都在运行,并监听 3000 端口。

192.168.1.2 上运行:

node app.js

192.168.1.3 上运行:

node app.js

步骤 5:访问 Web 应用

现在,通过浏览器访问 http://example.com(或者你配置的 IP 地址),Nginx 会将请求分发到两个 Node.js 应用服务器之一。你可以通过查看日志来验证流量是否均匀分配。

你可以通过 Nginx 的 访问日志/var/log/nginx/access.log)来监控负载均衡的流量分配情况。

步骤 6:调试与监控

  1. 查看 Nginx 日志

    Nginx 记录了每一个请求的详细信息。可以查看 Nginx 的 访问日志错误日志 来调试:

    • 访问日志/var/log/nginx/access.log
    • 错误日志/var/log/nginx/error.log

    使用以下命令查看日志:

    tail -f /var/log/nginx/access.log
    tail -f /var/log/nginx/error.log
    
  2. 调整负载均衡策略

    Nginx 支持多种负载均衡策略,默认情况下是 轮询(Round Robin)。但是,如果你需要根据某些条件调整负载均衡的方式,可以使用其他策略,如 最少连接数(Least Connections):

    upstream myapp {
        least_conn;  # 使用最少连接数策略
        server 192.168.1.2:3000;
        server 192.168.1.3:3000;
    }
    

总结

这个例子展示了如何使用 Nginx 作为负载均衡器,在多个应用服务器之间分配流量。通过定义 upstream 服务器池,Nginx 可以将客户端请求均匀地分发到多个后端应用服务器,从而提高系统的可用性和扩展性。

Nginx 负载均衡的好处:

  • 高可用性:即使某个应用服务器挂掉,其他服务器仍然可以继续处理请求,保证了服务的不中断。
  • 流量分担:可以根据流量自动分配请求,避免单一服务器承载过多负载,提升系统的处理能力。
  • 灵活的负载均衡策略:Nginx 支持多种负载均衡算法,如轮询、最少连接数等,满足不同的业务需求。

posted on 2024-12-10 06:44  GKLBB  阅读(11)  评论(0编辑  收藏  举报