当我们在一台服务器上 启动多个服务时, 因为在 http 协议下默认端口是 80 端口, https 下默认是 443 端口,为了好记和美观我们 只能对外暴漏
这两个端口。
以 http 协议 为例
假设我 有个后台服务在 127.0.0.1:3000
这个服务里面有个接口 /aaa/bbb
如果你的 后台服务启动到 3000 端口
http://xxxx.com:3000/aaa/bbb 这样也是可以访问的但是,不好记也不美观.
访问时 希望
http://xxxx.com/api/aaa/bbb
或
http://api.xxxx.com/aaa/bbb
所以我们得 让 Nginx 启动到 80 端口上, 然后 Nginx 通过 /api 前缀 或 二级域名 来进行代理到 目标服务
nginx.conf 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| ...
http {
...
server { listen 80; server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / { root html; index index.html index.htm; } ... # api 前缀代理 配置代码 # 将 /api/ 接口代理到 node 服务 127.0.0.1:3000/ # /api/ 回被 替换成 / 这样到 目标服务器时 path 中就没有 /api 了
location /api/ { proxy_pass http: } ... }
... # 二级域名代理 配置代码 # 将 api.kycloud.xyz 域名 代理到 后台接口服务 127.0.0.1:3000 server { listen 80; server_name api.ykcloud.xyz;
# 访问日志 访问这个域名的日志 都会被记录到 nginx 目录下的 logs/api.ykcloud.access.log 下 # 这里如果不指定单独的 log 文件, nginx 也会有一个总的(有请求进来) log文件 logs/access.log # 所以 如果不想单独记录这里可以注释 # access_log logs/api.ykcloud.access.log;
location / { proxy_pass http: # 其它代理配置 # proxy_redirect off; # proxy_set_header Host $host; # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ... }
|
实际中这两种方式选择一种就可以了.
还想到一种 代理方式就是 通过 正则表达式 配置 非静态资源代理到 后端服务. 我比较喜欢通过 二级域名 进行代理,这个就先不研究了.
附: location 配置模式

示例
nginx配置前缀匹配https://steel-mill.lg.china-yongfeng.com/mill-2250/app路径下的所有资源反向代理到https://steel-mill.lg.china-yongfeng.com/aaaa/app
要使用 Nginx 配置前缀匹配,将 https://steel-mill.lg.china-yongfeng.com/mill-2250/app 路径下的所有资源反向代理到 https://steel-mill.lg.china-yongfeng.com/aaaa/app,可以按照以下步骤进行配置:
Nginx 配置示例
打开 Nginx 配置文件。通常是 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default。
添加一个新的 server 块,或在现有的 server 块中添加以下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| server { listen 80; server_name steel-mill.lg.china-yongfeng.com;
location /mill-2250/app { proxy_pass https://steel-mill.lg.china-yongfeng.com/aaaa/app; 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;
proxy_ssl_server_name on; proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; proxy_ssl_ciphers HIGH:!aNULL:!MD5; } }
|
说明
listen 80;:监听 HTTP 端口 80。如果使用 HTTPS,改为 listen 443 ssl; 并配置 SSL 证书。server_name steel-mill.lg.china-yongfeng.com;:匹配请求的服务器名称。location /mill-2250/app { ... }:匹配以 /mill-2250/app 开头的所有路径。proxy_pass https://steel-mill.lg.china-yongfeng.com/aaaa/app;:将匹配到的路径代理到新的路径。proxy_set_header ...:设置 HTTP 请求头以便正确传递客户端信息。proxy_ssl_*:配置 SSL 相关设置。如果目标服务器使用 HTTPS,这些设置可以确保代理连接的安全性。
HTTPS 配置
如果你的 Nginx 服务器使用 HTTPS,请确保配置 SSL 证书。添加如下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| server { listen 443 ssl; server_name steel-mill.lg.china-yongfeng.com;
ssl_certificate /path/to/your_certificate.crt; ssl_certificate_key /path/to/your_certificate_key.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5;
location /mill-2250/app { proxy_pass https://steel-mill.lg.china-yongfeng.com/aaaa/app; 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;
proxy_ssl_server_name on; proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; proxy_ssl_ciphers HIGH:!aNULL:!MD5; } }
|
测试配置
在配置完成后,使用以下命令测试 Nginx 配置文件的正确性:
如果配置文件语法正确,重新加载 Nginx:
1
| sudo systemctl reload nginx
|
结论
通过以上步骤,你可以成功配置 Nginx 将 https://steel-mill.lg.china-yongfeng.com/mill-2250/app 路径下的所有资源反向代理到 https://steel-mill.lg.china-yongfeng.com/aaaa/app。确保正确设置 SSL 证书及相关代理头信息以确保请求的安全性和正确性。