- 先介绍下我的服务器环境以及项目的技术栈。服务器是
CentOS7.x
,Nginx 1.16.1
,服务器上部署了一个Angular
前端项目和一个SpringBoot 2.0
的后台项目(即前后端分离实现业务),那么自然Nginx
中做了正向代理和反向代理 - 下面介绍下路径,服务器上
Nginx
的路径是:/etc/nginx
,该路径下还有两个目录:conf.d
和html
。我的Angular
编译后的项目存放的路径是:/projfe/wxpadfe
. - 现在来讲下我遇到的问题。到目前为止只有一个前端项目,之后还会再追加前端项目,那么我的想法是在
Nginx
中配置多个location
以便以后可以访问多个前端项目,那么nginx.conf
的关于当前仅有的一个前端项目的location
的配置是:
location /wxpadfe {
alias /projfe/wxpadfe;
index index.html;
try_files $uri $uri/ /index.html;
}
这种配置实际是有问题,在互联网上访问时出现了404,实际看到了上面的try_files $uri $uri/ /index.html;
已经处理了 404,多次试验后发现Nginx
是到目录:/etc/nginx/html
下寻找项目了,那么我把Angular
前端项目拷贝到这个目录下,访问正常了,那么问题来了,为什么我上面的 location
设置无效??这样的话岂不是多个前端项目同时部署会出问题了?
- 值得一提的是,原本
Nginx
还要搜索/etc/nginx/conf.d
下的后缀是conf
的配置文件来加载,但是我将该目录下的文件后缀修改了,目的是为了只使用一个配置文件nginx.conf
,下面贴出这个配置文件的所有代码:
user nginx;
worker_processes 4;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $host - $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;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server{
listen 443 ssl;
server_name www.xdfznh.club;
ssl_certificate 1_www.我的域名.crt;
ssl_certificate_key 2_www.我的域名.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#root /projfe;
location /wxpadfe {
alias /projfe/wxpadfe;
index index.html;
try_files $uri $uri/ /index.html;
}
location /wxpadbe {
proxy_pass http://127.0.0.1:7070;
}
}
include /etc/nginx/conf.d/*.conf;
}
- 总结,通过上面的试验推理出的逻辑的是
Nginx
默认了/etc/nginx/html
是前端项目的所在目录,并且配置文件的location
没有生效,我要如何写配置达到我的目标?(配置文件nginx.conf
中通过location
布置多个前端项目) - 有必要的话:QQ = 409223171
nginx指定文件路径有两种方式root和alias,指令的使用方法和作用域:
[root]
语法:root path
默认值:root html
配置段:http、server、location、if
[alias]
语法:alias path
配置段:location
root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias路径替换location路径
alias是一个目录别名的定义,root则是最上层目录的定义。
还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的...而root则可有可无~~
root实例:
如果一个请求的URI是
/t/a.html
时,web服务器将会返回服务器上的/www/root/html/t/a.html
的文件。alias实例:
如果一个请求的URI是
/t/a.html
时,web服务器将会返回服务器上的/www/root/html/new_t/a.html
的文件。注意这里是new_t,因为alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。注意: