在 Nginx 中配置前端和后端共用一个域名的情况,通常是通过路径或子路径将请求转发到不同的服务。以下是一个示例配置,假设:
前端静态文件在 /var/www/frontend/。
后端 API 服务运行在 http://127.0.0.1:5000。
域名是 example.com,其中:
静态前端通过 example.com 访问。
后端 API 通过 example.com/api/ 访问。
server {listen 80;server_name example.com;# 配置前端静态文件location / {root /var/www/frontend;index index.html;# 支持前端 history 模式路由try_files $uri $uri/ /index.html;}# 配置后端 API 路由location /api/ {proxy_pass http://127.0.0.1:5000;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;}# 配置错误页面(可选)error_page 404 /404.html;location = /404.html {root /var/www/frontend;}
}
在前端使用基于路由的单页应用程序(如 React、Vue )时,前端的路由模式通常分为 hash 模式 和 history 模式。在 Nginx 配置前端路由时,需要特别处理 history 模式,因为它依赖于 HTML5 的 pushState 功能,而不带 # 的路径直接被 Nginx 视为文件路径。
try_files 指令的作用就是按顺序检査文件是否存在,返回第一个找到的文件。 $uri 是nginx 提供的变量,指当前请求的 URI,不包括任何参数,当请求静态资源文件的时候,命中 $uri 规则;当请求页面路由的时候,命中 /ndex.html 规则