Nginx 命令

Nginx 提供了多种命令来帮助我们管理和配置服务器。以下是常用的一些命令:

nginx -t          # 检查 Nginx 配置文件是否正常
nginx -s reload   # 重新加载 Nginx 的配置文件

Nginx 配置文件路径

Nginx 配置文件主要存放在以下路径:

  • 配置文件路径:/etc/nginx/
  • 配置文件存放目录:/etc/nginx/conf.d/
  • Nginx 主配置文件:/etc/nginx/nginx.conf
  • 内容类型配置文件:/etc/nginx/mime.types

Nginx 基本配置

示例 1:基本的虚拟主机配置

events { }  # 连接模块,处理 Nginx 如何处理连接的配置

http {
    include /etc/nginx/mime.types;  # 引入内容类型配置文件

    server {
        listen 80;                        # 监听端口 80
        server_name localhost;            # 配置服务器域名
        root /var/www/localhost;           # 配置网页所在目录
        index home.html;                  # 配置默认访问文件为 home.html

        return 200 "hello nginx.";        # 返回状态码 200 和自定义响应内容
    }
}

解析:

  • events { }:这是 Nginx 的连接模块,负责处理与客户端的连接。在此模块内可以配置 worker 进程等参数。
  • http { }:这是 HTTP 配置模块,包含了所有与 HTTP 请求处理相关的配置。我们在这里进行域名、端口、根目录等配置。
  • server { }:配置一个虚拟服务器。在每个 server 块中,可以设置端口、域名、根目录以及默认的首页。

Nginx 配置的 location 基础用法

示例 2:配置 location 来指定访问路径

events { }

http {
    include /etc/nginx/mime.types;

    server {
        listen <port>;            # 配置监听端口
        server_name <name>;       # 配置服务器域名
        location <var> <url> {    # 配置访问路径的匹配规则
            root <path>;          # 配置根目录
            index <file>;         # 配置默认文件
        }
    }
}

解析:

  • location 用于定义不同的 URL 路径。常用的匹配方式有:
    • 普通前缀匹配:/home 等。
    • 精确匹配:= /home
    • 正则匹配:~ /video[6-9].mp4

重定向与 URL 重写

示例 3:配置重定向

events { }

http {
    include /etc/nginx/mime.types;

    server {
        listen <port>;                # 配置监听端口
        server_name <name>;           # 配置服务器域名
        root <path>;

        location /temp {              # 配置访问 /temp 时进行重定向
            return 307 /home/index.html;
        }
    }
}

解析:

  • return 用于返回 HTTP 状态码和自定义响应内容。这里的 307 是临时重定向,意味着客户端会被重定向到新的 URL。

示例 4:URL 重写

events { }

http {
    include /etc/nginx/mime.types;

    server {
        listen <port>;
        server_name <name>;
        root <path>;

        rewrite /temp /home/index.html;  # 配置 URL 重写规则
    }
}

解析:

  • rewrite 用于修改请求的 URL,将 /temp 请求重定向到 /home/index.html

高级配置:错误页面与响应头

示例 5:自定义 404 错误页面与响应头

events { }

http {
    include /etc/nginx/mime.types;

    server {
        listen <port>;
        server_name <name>;
        root <path>;

        error_page 404 <path>;          # 自定义 404 错误页面

        location / {
            add_header <name> <value>;  # 添加自定义响应头
            try_files $uri $uri/ =404;  # 先尝试访问文件,如果没有则返回 404
        }
    }
}

解析:

  • error_page 用于指定当出现错误时返回的页面。
  • add_header 用于自定义 HTTP 响应头。
  • try_files 先尝试按给定顺序查找文件,如果找不到则返回指定的错误页(如 404)。

反向代理与负载均衡

示例 6:配置反向代理

events { }

http {
    include /etc/nginx/mime.types;

    server {
        listen <port>;
        server_name <name>;
        root <path>;

        location /blog {
            proxy_pass http://localhost:8100;  # 配置反向代理,访问 /blog 时转发请求到 http://localhost:8100
        }
    }
}

解析:

  • proxy_pass 用于将请求转发到另一个服务器,这里是将 /blog 路径的请求转发到 localhost:8100

示例 7:配置负载均衡

events { }

http {
    upstream backend-servers {
        server localhost:3000 weight=2;  # 设置服务器地址并分配权重
        server localhost:3001 weight=6;
    }

    include /etc/nginx/mime.types;

    server {
        listen <port>;
        server_name <name>;
        root <path>;

        location / {
            proxy_pass http://backend-servers;  # 启用负载均衡,将请求分配到集群中的服务器
        }
    }
}

解析:

  • upstream 配置模块用于定义服务器集群。通过设置 weight,我们可以控制不同服务器的负载比例。

配置 HTTPS

示例 8:配置 HTTPS 服务

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen 443 ssl;                    # 配置监听 443 端口并启用 SSL
        server_name <name>;                # 配置域名
        ssl_certificate /root/card/name.pem;  # 配置 SSL 证书路径
        ssl_certificate_key /root/card/name.key;  # 配置证书密钥路径

        location / {
            proxy_pass http://<url>:<port>;
        }
    }

    server {
        listen 80;
        server_name <name>;
        rewrite ^(.*)$ https://$host$1 permanent;  # 将 HTTP 请求重定向到 HTTPS
    }
}

解析:

  • listen 443 ssl 配置启用 HTTPS 服务。
  • ssl_certificatessl_certificate_key 配置 SSL 证书路径。
  • rewrite 将所有 HTTP 请求重定向到 HTTPS。

Nginx 核心模块讲解

1. events { } 模块

events 模块负责处理与客户端连接相关的配置。你可以在这里设置 worker 进程的数量、每个进程可以处理的最大连接数等。

2. http { } 模块

http 模块是 Nginx 配置中最常用的部分,它处理 HTTP 请求的配置。在此模块中,你可以配置内容类型、代理、负载均衡等。

3. server { } 模块

server 模块用于配置虚拟主机。每个 server 块都可以有独立的域名、端口、根目录、访问路径等配置。

4. upstream { } 模块

upstream 模块用于配置负载均衡,它定义了多个后端服务器,并控制请求如何在这些服务器间分配。