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 等参数
相关推荐
yzx9910134 分钟前
服务器生成图片
运维·服务器
liulilittle2 小时前
C++ TAP(基于任务的异步编程模式)
服务器·开发语言·网络·c++·分布式·任务·tap
caolib5 小时前
无需云服务器的内网穿透方案 -- cloudflare tunnel
运维·服务器·内网穿透·tunnel·cloudflared
誰能久伴不乏5 小时前
Linux系统调用概述与实现:深入浅出的解析
linux·运维·服务器
程序员学习随笔5 小时前
Linux进程深度解析(2):fork/exec写时拷贝性能优化与exit资源回收机制(进程创建和销毁)
linux·运维·服务器
-SGlow-6 小时前
MySQL相关概念和易错知识点(2)(表结构的操作、数据类型、约束)
linux·运维·服务器·数据库·mysql
代码改变世界ctw6 小时前
Linux内核设计与实现 - 第14章 块I/O层
linux·运维·服务器
Dreams_l7 小时前
网络编程2(应用层协议,传输层协议)
运维·服务器·网络
就改了8 小时前
Nginx 动静分离配置(详细版)
nginx
誰能久伴不乏9 小时前
Linux如何执行系统调用及高效执行系统调用:深入浅出的解析
java·服务器·前端