Nginx 的配置分为多个块,其中 http 块是其中的主要部分,包含了 http 的相关配置。
http 块主要可以设置以下参数:
include /etc/nginx/mime.types;
表示引入了 /etc/nginx/mime.types
文件,其中包含了支持的文件类型。$remote_addr
表示客户端IP地址,$request
表示请求内容,等等。在 Nginx 的 http 配置中,可以包含多个 server 配置。如下:
http {
# server块1
server {
# 该server块的配置
}
# server块2
server {
# 该server块的配置
}
}
其中,server 块的主要参数包含:
# 定义一个HTTP服务器块,监听80端口,并且同时监听IPv4和IPv6地址的80端口
server {
listen 80;
listen [::]:80;
server_name localhost;
# 注释掉以下access_log配置,表示不记录访问日志
#access_log /var/log/nginx/host.access.log main;
# 配置根目录和默认的索引文件
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 注释掉以下error_page配置,表示不自定义错误页
#error_page 404 /404.html;
# 配置5xx错误码的错误页
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
该配置定义了一个名为 localhost
的 server,监听本机 80 端口。
location
配置是Nginx中用来匹配请求URI(Uniform Resource Identifier)并指定如何处理请求的指令。在Nginx配置文件中,location 块用于根据不同的 URI 路径来定义不同的行为,如代理请求、重定向、设置缓存等。
配置类型
location 块有不同的匹配类型:
location /example
:匹配以/example开头的URI路径。=
:精准匹配。location = /path/to/resource
,只有当请求的URI完全等于 /path/to/resource
时,该 location 块才会生效。~
:正则表达式匹配。location ~ ^/images/.*\.jpg$
:匹配以 /images/
开头且以 .jpg
结尾的URI路径。~*
:不区分大小写的正则表达式匹配。location ~* \.jpg$
:会匹配以 .jpg
结尾的URI,不区分大小写。^~
:优先匹配。location ^~ /static/
:匹配以 /static/
开头的URI路径,该匹配的优先级高于其他匹配。配置块参数
location 配置块中可以配置一些参数,常见的如下:
root /usr/share/nginx/html
;alias /path/to/files
;try_files $uri $uri/ /index.html
;proxy_pass http://backend_server
;rewrite ^/oldpath/(.*)$ /newpath/$1 permanent
;auth_basic "Restricted Area"
;limit_rate 100k
;expires 1d
;add_header X-MyHeader "My Custom Header"
;proxy_set_header X-Real-IP $remote_addr
;proxy_redirect off
;proxy_pass_header Server
;下面是一个简单的Nginx配置示例:
# 定义一个HTTP服务器块,监听80端口,并且设置主机名为example.com
server {
listen 80; # 监听80端口
server_name example.com; # 设置主机名为example.com
# 处理请求根路径的配置
location / {
root /usr/share/nginx/html; # 设置根目录为/usr/share/nginx/html
index index.html; # 设置默认的索引文件为index.html
}
# 处理以/images/开头的请求路径
location /images/ {
alias /var/www/images/; # 将URI路径替换为/var/www/images/
}
# 处理以/api/开头且以.json结尾的请求路径
location ~ ^/api/.*\.json$ {
proxy_pass http://backend_server; # 将请求代理到后端服务器backend_server
}
}
upstream
块用于定义一组后端服务器,用于负载均衡或代理请求。
例如:
upstream my_backend {
server backend_server1:8000; # 定义第一个后端服务器,格式为 server [IP或域名]:端口
server backend_server2:8000; # 定义第二个后端服务器,可以配置多个服务器
server unix:/tmp/backend.sock; # 也可以使用Unix Socket代替IP和端口
weight=1; # 设置服务器的权重,默认为1,负载均衡时会根据权重分配请求
max_fails=3; # 设置请求失败次数的阈值,默认为1,超过阈值后服务器被认为不可用
fail_timeout=10s; # 设置服务器的失败超时时间,默认为10秒
backup; # 设置服务器为备份服务器,在其他服务器不可用时使用
down; # 设置服务器为暂时不可用状态,不会分配请求给该服务器
}
在 upstream 块中,可以配置多个后端服务器,Nginx 会根据负载均衡算法将请求分发给这些后端服务器。
需要注意的是,如果是在 Docker 中运行的 Nginx,则这里的 server 字段可以配置为 容器名称:端口号
,如 ixiaoniu:8080
。
在定义了 upstream 块后,便可以在 location 块中通过 proxy_pass 指令将请求代理到定义的 upstream 块中的后端服务器:
location / {
proxy_pass http://my_backend; # 将请求代理到名为 my_backend 的 upstream 块中定义的后端服务器
}
docker exec -it nginx bash
:进入在 Docker 中运行的 Nginx 容器命令行。nginx -v
:显示 Nginx 版本。nginx -t
:测试 Nginx 配置文件是否有错误。nginx -s reload
:重新加载配置。===========================
自己的案例:
1. 目录结构
[root@k8s-worker07-59 nginx]# pwd
/opt/nginx
[root@k8s-worker07-59 nginx]# tree
.
├── back
│ ├── conf.d
│ │ └── default.conf
│ └── nginx.conf
├── conf.d
│ └── server
│ ├── jettech
│ │ ├── jettech-server.conf
│ │ └── location
│ │ └── index.conf
│ └── nexus
│ ├── location
│ │ └── index.conf
│ └── nexus-server.conf
├── logs
│ ├── access.log
│ └── error.log
└── nginx.conf
9 directories, 9 files
2. 配置文件
[root@k8s-worker07-59 nginx]# ls
back conf.d logs nginx.conf
[root@k8s-worker07-59 nginx]# cat nginx.conf
user root;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 10240;
}
http {
include /etc/nginx/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;
#include /etc/nginx/conf.d/server/*/*.conf;
include conf.d/server/*/*.conf;
}
[root@k8s-worker07-59 nginx]# ls conf.d/server/jettech/
jettech-server.conf location
[root@k8s-worker07-59 nginx]# cat conf.d/server/jettech/jettech-server.conf
server {
listen 80;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
#include /etc/nginx/conf.d/server/jettech/location/*.conf;
include conf.d/server/jettech/location/*.conf;
}
[root@k8s-worker07-59 nginx]# cat conf.d/server/jettech/location/index.conf
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
[root@k8s-worker07-59 nginx]# docker run --name wubo --privileged=true -p 9000:80 -p 9001:8080 -p 9002:8081 -it -v /opt/nginx/conf.d:/etc/nginx/conf.d -v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf -v /opt/nginx/logs:/var/log/nginx -v /etc/localtime:/etc/localtime -d harbor.jettech.com/jettechtools/nginx:1.21.4