nginx配置

-
2024-07-23

Nginx 基本配置

Nginx 配置文件路径

  • 主配置文件:/etc/nginx/nginx.conf
  • 站点配置文件:/etc/nginx/sites-available//etc/nginx/sites-enabled/

全局配置

  • 全局配置设置在 nginx.confhttp 块中,影响整个服务器。

站点配置

  • 每个站点都有一个 server 块,定义该站点的配置。
  • 站点配置文件通常放在 sites-available 目录中,通过符号链接放到 sites-enabled 目录中以启用。

重定向

将 HTTP 重定向到 HTTPS

将请求重定向到另一个网站

反向代理

  1. 基本反向代理配置

负载均衡

定义上游服务器组

基本负载均衡配置

负载均衡策略

  • 轮询(默认)
  • 权重
  • IP 哈希
  • 最少连接

健康检查和备份服务器

变量

Nginx 提供了大量原生支持的变量,用于获取请求信息、响应信息、客户端信息等。常用变量包括:

  • $host:请求中的主机名字段。
  • $remote_addr:客户端的 IP 地址。
  • $request_uri:包含请求参数的原始 URI。
  • $scheme:请求使用的协议(http 或 https)。

通过这些配置,可以:

  1. 基本站点配置:管理多个网站,设置站点根目录和索引文件。
  2. 重定向:将 HTTP 请求重定向到 HTTPS 或其他网站。
  3. 反向代理:将请求代理到后端服务器,并传递客户端信息。
  4. 负载均衡:使用多种策略分配请求到多个后端服务器,提高可用性和性能。

通过理解和应用这些配置,你可以有效管理和优化 Nginx 服务器,以满足不同的需求和场景。

负载均衡

先定义一个负载均衡的 upstream 块

upstream my_backend {
    least_conn;
    server 192.168.0.2 weight=3 max_fails=3 fail_timeout=30s;
    server 192.168.0.3 weight=1 max_fails=3 fail_timeout=30s;
    server 192.168.0.4 backup;
}
upstream my_backend {
    least_conn;
    server 192.168.0.2;
    server 192.168.0.3;
}
upstream my_backend {
    ip_hash;
    server 192.168.0.2;
    server 192.168.0.3;
}
upstream my_backend {
    server 192.168.0.2 weight=3;
    server 192.168.0.3 weight=1;
}

然后定义一个服务器块调用

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://my_backend;
        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;
    }
}

负载均衡

http {
    upstream my_backend {
        server 192.168.0.2;
        server 192.168.0.3;
    }
}
server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://backend_server;
        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;
    }
}
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 http://google.com;
}
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;  # 将 HTTP 重定向到 HTTPS
}

 

 

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location /aa/ {
        root /var/www/aa;
        index index.html index.htm index.php;  # 可以指定索引文件
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;  # 将 HTTP 重定向到 HTTPS
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";

    root /var/www/example.com;
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location /aa/ {
        root /var/www/aa;
        index index.html index.htm index.php;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    error_page 404 /404.html;
    location = /404.html {
        internal;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        internal;
    }
}

 

重定向

server {
    listen 80;
    server_name example.com www.example.com;

    return 301 http://google.com;
}

反向代理

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://google.com;
        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;
    }
}
http {
    upstream my_backend {
        server 192.168.0.2;
        server 192.168.0.3;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://my_backend;
            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;
        }
    }
}

目录