Nginx介绍及使用

1.Nginx介绍

Nginx是一款开源的、高性能的HTTP和反向代理服务器

1.正向代理和反向代理

正向代理(代理客户端)是一种位于客户端和目标服务器之间的中间服务器。客户端通过正向代理服务器向目标服务器发送请求,代理服务器将请求转发给目标服务器,并将目标服务器的响应返回给客户端

反向代理(代理服务端)客户端的请求首先发送到反向代理服务器,反向代理服务器再将请求转发到后端的服务器。后端服务器处理请求后,将响应返回给反向代理服务器,反向代理服务器再将响应返回给客户端。

2.负载均衡(Load Balancing)

负载均衡用于在多个服务器之间分配客户端的请求,以优化资源利用、提高系统的可用性和可靠性。

主要功能
  1. 流量分配:

    • 根据预设的算法(如轮询、最少连接、加权等),将客户端的请求分配到不同的服务器上,避免某一台服务器过载。

    • 常见的算法包括:

      • 轮询(Round Robin):按顺序依次分配请求。

      • 最少连接(Least Connections):优先分配到当前连接数最少的服务器。

      • 加权轮询(Weighted Round Robin):根据服务器的权重分配请求。

      • 加权最少连接(Weighted Least Connections):结合权重和连接数分配请求。

      • IP哈希(IP Hash):根据客户端的IP地址进行哈希计算,将请求分配到固定的服务器。

  2. 故障转移(Failover):

    • 当某一台服务器出现故障时,能够自动将流量切换到其他健康的服务器上,确保服务的持续可用。

    • 负载均衡器会定期检查后端服务器的健康状态,自动移除故障服务器,并重新分配流量。

3.Nginx

主要特点
  1. 高性能:

    • Nginx采用事件驱动的异步非阻塞架构,能够处理大量的并发连接,性能优于传统的Apache服务器。

    • 它可以轻松处理数万个并发连接,适合高流量的网站。

  2. 反向代理和负载均衡:

    • Nginx可以作为反向代理服务器,将客户端请求转发到后端的多个服务器上,并根据配置的策略进行负载均衡。

    • 支持多种负载均衡算法,如轮询、最少连接、IP哈希等。

  3. 静态文件服务:

    • Nginx对静态文件(如HTML、CSS、JavaScript、图片等)的处理非常高效,可以直接从磁盘读取文件并返回给客户端,减少后端服务器的负担。

2.Nginx启动和停止

1. 启动 Nginx

复制代码
sudo systemctl start nginx

sudo nginx
  • 说明:启动 Nginx 服务。

2. 停止 Nginx

bash复制

复制代码
sudo systemctl stop nginx

或者

bash复制

复制代码
sudo nginx -s stop
  • 说明:立即停止 Nginx 服务。

3. 重启 Nginx

bash复制

复制代码
sudo systemctl restart nginx

或者

bash复制

复制代码
sudo nginx -s reload
  • 说明:重新加载 Nginx 配置文件而不中断现有连接。

4. 重新加载配置文件

bash复制

复制代码
sudo nginx -s reload
  • 说明:重新加载 Nginx 配置文件而不中断现有连接。如果配置文件有语法错误,Nginx 会拒绝加载。

3.Nginx配置
/etc/nginx/nginx.conf

nginx.conf

├── 全局块

├── events 块

└── http 块

├── 通用设置(日志、MIME等)

├── server 块(一个网站)

│ ├── listen / server_name

│ ├── location /(静态文件或反向代理)

│ └── error_page

└── ...

bash 复制代码
# 全局块
user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

# 事件块
events {
    worker_connections  1024;
}

# HTTP 块
http {
    include       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;
    keepalive_timeout  65;

     # 1️⃣ 定义后端服务集群(upstream)
    upstream my_backend {
        server 127.0.0.1:8081 weight=3;
        server 127.0.0.1:8082 weight=1;
    }

    # 服务器块
    server {
        listen       80;
        server_name  localhost;

        # 位置块
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }

        # 错误页
        error_page  404              /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }

        # 反向代理示例
        location /api/ {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}
proxy_set_header Host $host;
  • proxy_set_header 指令用于设置转发请求时的 HTTP 头。

  • Host $host; 表示在转发请求时,将原始请求的 Host 头设置为 $host(即客户端请求的域名或 IP 地址)。这确保后端服务器能够正确处理请求,因为它知道请求原本是针对哪个域名的。

proxy_set_header X-Real-IP $remote_addr;
  • 这行配置设置了 X-Real-IP 头,值为 $remote_addr,即客户端的真实 IP 地址。

  • 由于 Nginx 作为代理服务器,后端服务器看到的请求来源是 Nginx 的 IP 地址(通常是 127.0.0.1)。通过设置 X-Real-IP,后端服务器可以知道实际发起请求的客户端 IP 地址。

用途 配置示例
静态文件服务 location / { root /path/to/html; }
反向代理 proxy_pass http://backend;
负载均衡 upstream backend { server 127.0.0.1:8001; server 127.0.0.1:8002; }
HTTPS 配置 使用 listen 443 ssl; 和 ssl_certificate 等参数
相关推荐
FITA阿泽要努力16 分钟前
第1周·第2讲|一道综合代码推演
服务器·前端·python·agent.
小羊没烦恼!26 分钟前
关于大型asp.net应用系统的架构-架构的选择
java·服务器·开发语言·前端·c#
2301_7779983434 分钟前
TCP连接断开:进程终止、主机断电与网络断开
linux·服务器·网络·tcp/ip
发量惊人的中年网工1 小时前
服务器托管一个机柜一年多少钱?2026年9月最新机柜租用价格参考
运维·服务器·网络
fundoit1 小时前
资源服务器如何对 JWT 进行验签
java·运维·服务器·spring boot·php·oauth2
云贝贝贝1 小时前
【无标题】TDSQL 分片键怎么选?选错等于数据倾斜加跨分片慢查询
运维·服务器·数据库·腾讯云
hzxpaipai1 小时前
AI把网站页面做出来了,谁来负责后台、服务器和正式上线?
运维·服务器·人工智能
遇印记1 小时前
数据通信初步
运维·服务器·网络·windows·学习
学linux的QQ蛋1 小时前
图解 Linux 驱动编译进内核的完整工作流程
linux·运维·服务器
print_Hyon2 小时前
【ENSP】DHCP 基础实验(路由器作为 DHCP 服务器,接口地址池模式)
运维·服务器·智能路由器