nginx非根路径部署
一、为什么要用到非根路径部署?
Nginx 本身并不强制要求必须在非根路径部署应用。通常有以下情况需要非根路径部署:
1.多个应用共存:如果服务器需要托管多个网站或应用程序,每个应用可以部署在不同的子目录下。
2.资源隔离:在非根路径部署可以作为一种资源隔离的方式,帮助防止一个应用影响到另一个应用的运行环境。
3.安全性:非根路径部署可以作为额外的安全措施之一。例如,如果某个应用存在安全漏洞,限制其访问权限和范围可以减少潜在的损害。
4.方便管理和维护:当应用程序部署在特定的子目录中时,可以通过 Nginx 的配置文件更灵活地控制对这些目录的访问,比如设置访问控制、重写规则等。
5.避免命名冲突:当服务器上部署了多个项目时,确保它们各自位于独立的子目录中可以帮助避免静态资源或其他文件的命名冲突问题。
6.反向代理设置:**使用 Nginx 作为反向代理服务器时,可以通过非根路径将请求转发给后端的应用服务器。
二、使用步骤
1.引入库
代码如下(示例):
# user nobody;
#设置工作进程的数量为1
worker_processes 1;
#每个工作进程允许的最大并发连接数为 1024
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#隐藏版本号,关闭服务器标识
server_tokens off;
#监听端口 18080
#服务器名称为 localhost
server {
listen 18080;
server_name localhost;
#前端路径为具体的上下文路径,比如hospital
location /hospital {
#设置前端应用的基础目录
alias /home/hospital/web/dist;
#尝试直接从文件系统服务请求的文件,如果文件不存在则返回index.html
try_files $uri $uri/ /hospital/index.html;
index index.html index.htm;
}
#后端请求转发路径
location /sick-api/ {
#设置代理传递给后端的HTTP头信息
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE_HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
#将请求转发到本地的 8081 端口
proxy_pass http://localhost:8081/;
}
#定义错误页面的位置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
总结
这段配置使得前端应用和后端 API 分别位于/hospital和 /tow-api 路径下。前端应用的静态资源和服务将从/home/hospital/web/dist 读取,而所有指向 /sick-api/ 的请求都将被代理到监听在 localhost:8081 的后端服务。这种配置非常适合在一台服务器上托管多个应用,并且每个应用都有自己的路径前缀。