Web服务器(Nginx)

应用分类:

Nginx 是一款高性能的开源 Web 服务器和反向代理服务器,常用于负载均衡、HTTP 缓存和静态内容服务。

原价为:1.00¥。当前价格为:0.00¥。

Web服务器 Nginx 介绍

一、Nginx 的主要特点及核心功能

Nginx (发音同 “engine-x”) 是一款高性能的开源 Web 服务器、反向代理服务器、负载均衡器和 HTTP 缓存。其以高并发、低内存消耗和丰富的特性而闻名,是现代 Web 架构中不可或缺的组件。

主要特点:

  • 高性能: Nginx 采用事件驱动的、异步的、非阻塞的架构,能够处理大量的并发连接,且资源消耗较低,尤其在处理静态内容和作为反向代理时表现出色。
  • 反向代理: Nginx 可以作为客户端和后端服务器之间的中间层,接收客户端请求并将它们转发给后端服务器。这有助于隐藏后端服务器的真实地址、提高安全性、实现负载均衡和缓存。
  • 负载均衡: Nginx 支持多种负载均衡算法(如 Round Robin、Least Connections、IP Hash 等),可以将客户端请求分发到多个后端服务器,提高系统的可用性和可伸缩性。
  • HTTP 缓存: Nginx 可以缓存静态和动态内容,减轻后端服务器的压力,提高响应速度。
  • 静态内容服务: Nginx 在服务静态文件(如 HTML、CSS、JavaScript、图片等)方面非常高效。
  • SSL/TLS 终止: Nginx 可以处理 HTTPS 连接的加密和解密,将解密后的请求转发给后端服务器。
  • 虚拟主机 (Virtual Hosts): Nginx 允许在单个服务器上托管多个网站,通过主机名或 IP 地址进行区分。
  • 模块化架构: Nginx 的功能通过模块进行扩展,用户可以根据需要启用或禁用特定的模块。
  • 配置简单灵活: Nginx 的配置文件语法简洁直观,易于学习和管理。
  • 健康检查: Nginx 可以定期检查后端服务器的健康状态,并将流量只转发到健康的实例。
  • WebSocket 支持: Nginx 可以作为 WebSocket 的反向代理。
  • HTTP/2 和 HTTP/3 支持: Nginx 支持最新的 HTTP 协议,提供更高的性能和效率。

核心功能:

  • Web 服务器: 响应客户端的 HTTP(S) 请求,提供网站内容。
  • 反向代理: 将客户端请求转发给后端服务器。
  • 负载均衡: 在多个后端服务器之间分配流量。
  • HTTP 缓存: 缓存静态和动态内容以提高性能。

二、Nginx 的基础使用流程

本部分描述在 Nginx 服务已经成功安装并运行的前提下,用户进行基本配置和管理 Nginx 的流程。

  1. 查找 Nginx 配置文件: Nginx 的主要配置文件通常位于 /etc/nginx/nginx.conf。其他的站点配置通常放在 /etc/nginx/conf.d//etc/nginx/sites-available/ 目录下,并通过符号链接到 /etc/nginx/sites-enabled/ 目录启用。

  2. 编辑 Nginx 配置文件: 使用文本编辑器(如 nanovim)打开 Nginx 的配置文件。您将看到类似以下的结构:

    user  nginx;
    worker_processes  auto;
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
        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;
        sendfile        on;
        #tcp_nopush     on;
        keepalive_timeout  65;
        #gzip  on;
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
    }
    events {
        worker_connections  1024;
    }
    
  3. 配置虚拟主机 (Server Blocks): 要托管多个网站或配置特定的网站行为,您需要在 http 块中定义 server 块(虚拟主机)。通常的做法是在 /etc/nginx/sites-available/ 目录下创建每个站点的配置文件,例如 mywebsite.conf

    server {
        listen 80;
        server_name example.com www.example.com;
        root /var/www/example.com/html;
        index index.html index.htm;
        location / {
            try_files $uri $uri/ =404;
        }
    }
    
    • listen 80;: 监听 80 端口(HTTP)。
    • server_name example.com www.example.com;: 定义该虚拟主机处理的域名。
    • root /var/www/example.com/html;: 指定网站的根目录。
    • index index.html index.htm;: 指定默认的索引文件。
    • location / { ... }: 定义根路径 / 的处理规则。try_files 指令尝试按顺序查找文件,如果找不到则返回 404 错误。
  4. 启用虚拟主机: 创建配置文件后,需要将其符号链接到 /etc/nginx/sites-enabled/ 目录以启用该虚拟主机:

    sudo ln -s /etc/nginx/sites-available/mywebsite.conf /etc/nginx/sites-enabled/
    
  5. 测试 Nginx 配置: 在重新加载 Nginx 配置之前,务必测试配置文件的语法是否正确:

    sudo nginx -t
    

    如果配置正确,您将看到类似 syntax is oktest is successful 的输出。

  6. 重新加载 Nginx 配置: 如果配置测试通过,重新加载 Nginx 服务以使更改生效:

    sudo systemctl reload nginx
    # 或者
    sudo service nginx reload
    
  7. 配置反向代理: 要将 Nginx 配置为反向代理,您需要在 location 块中使用 proxy_pass 指令,指向后端服务器的地址和端口:

    server {
        listen 80;
        server_name myapp.example.com;
        location / {
            proxy_pass http://backend-server:8080;
            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;
        }
    }
    
  8. 配置负载均衡: 要在多个后端服务器之间进行负载均衡,您需要在 http 块中定义 upstream 块,并在 proxy_pass 指令中引用该 upstream

    http {
        upstream mybackends {
            server backend1.example.com:8080;
            server backend2.example.com:8080;
            # 可以添加更多的后端服务器
        }
        server {
            listen 80;
            server_name myapp.example.com;
            location / {
                proxy_pass http://mybackends;
                # 其他 proxy_set_header 指令
            }
        }
    }
    

三、简单使用实例

假设我们希望使用 Nginx 提供一个简单的静态 HTML 页面。

  1. 创建网站根目录:

    sudo mkdir -p /var/www/mywebsite/html
    
  2. 创建 HTML 文件 (/var/www/mywebsite/html/index.html):

    <!DOCTYPE html>
    <html>
    <head>
        <title>Welcome to My Website!</title>
    </head>
    <body>
        <h1>Hello from Nginx!</h1>
        <p>This is a simple static HTML page served by Nginx.</p>
    </body>
    </html>
    
  3. 创建 Nginx 虚拟主机配置文件 (/etc/nginx/sites-available/mywebsite.conf):

    server {
        listen 80;
        server_name mywebsite.local;
        root /var/www/mywebsite/html;
        index index.html;
        location / {
            try_files $uri $uri/ =404;
        }
    }
    
  4. 启用虚拟主机:

    sudo ln -s /etc/nginx/sites-available/mywebsite.conf /etc/nginx/sites-enabled/
    
  5. 配置本地 DNS (用于测试): 编辑您的 hosts 文件 (/etc/hosts on Linux/macOS, C:\Windows\System32\drivers\etc\hosts on Windows) 并添加一行:

    127.0.0.1 mywebsite.local
    
  6. 测试 Nginx 配置并重新加载:

    sudo nginx -t
    sudo systemctl reload nginx
    
  7. 在浏览器中访问: 在您的 Web 浏览器中输入 http://mywebsite.local。您应该能够看到 “Welcome to My Website!” 的内容。