Nginx 基本配置※
Nginx 配置文件路径:
- 主配置文件:
/etc/nginx/nginx.conf
- 站点配置文件:
/etc/nginx/sites-available/
和/etc/nginx/sites-enabled/
全局配置:
- 全局配置设置在
nginx.conf
的http
块中,影响整个服务器。
站点配置:
- 每个站点都有一个
server
块,定义该站点的配置。 - 站点配置文件通常放在
sites-available
目录中,通过符号链接放到sites-enabled
目录中以启用。
重定向※
将 HTTP 重定向到 HTTPS:
将请求重定向到另一个网站:
反向代理※
- 基本反向代理配置:
负载均衡※
定义上游服务器组:
基本负载均衡配置:
负载均衡策略:
- 轮询(默认)
- 权重
- IP 哈希
- 最少连接
健康检查和备份服务器:
变量※
Nginx 提供了大量原生支持的变量,用于获取请求信息、响应信息、客户端信息等。常用变量包括:
$host
:请求中的主机名字段。$remote_addr
:客户端的 IP 地址。$request_uri
:包含请求参数的原始 URI。$scheme
:请求使用的协议(http 或 https)。
通过这些配置,可以:※
- 基本站点配置:管理多个网站,设置站点根目录和索引文件。
- 重定向:将 HTTP 请求重定向到 HTTPS 或其他网站。
- 反向代理:将请求代理到后端服务器,并传递客户端信息。
- 负载均衡:使用多种策略分配请求到多个后端服务器,提高可用性和性能。
通过理解和应用这些配置,你可以有效管理和优化 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;
}
}
}