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_certificate
和ssl_certificate_key
配置 SSL 证书路径。rewrite
将所有 HTTP 请求重定向到 HTTPS。
Nginx 核心模块讲解
1. events { }
模块
events
模块负责处理与客户端连接相关的配置。你可以在这里设置 worker 进程的数量、每个进程可以处理的最大连接数等。
2. http { }
模块
http
模块是 Nginx 配置中最常用的部分,它处理 HTTP 请求的配置。在此模块中,你可以配置内容类型、代理、负载均衡等。
3. server { }
模块
server
模块用于配置虚拟主机。每个 server
块都可以有独立的域名、端口、根目录、访问路径等配置。
4. upstream { }
模块
upstream
模块用于配置负载均衡,它定义了多个后端服务器,并控制请求如何在这些服务器间分配。