测试环境虚拟机周五下午5点左右忽然遭遇文件夹漂移事故,虽然是运维的事情,但是项目管理是本身的,周一还须要业务验收,真是头疼死了。javascript
前后碰到若干问题,就不一一详细描述了,本博客只为本身留存备份,如果有人看到博客能顺便解决本身的问题也是举手之劳,如果不对症请不要恶语相向。css
问题1、全部请求均报404错误,查看配置都是对的,结果发现是由于Nginx用户启动是nobody引发的,修改nobody以后解决问题。html
修改配置nginx.conf,将user从nobody修改成root前端
user root; worker_processes 1;
PS:此问题还有多是Nginx对访问的目录没有访问权限引发的,注意排查。vue
问题2、注意alias和root配置的正确用法。java
root与alias主要区别在于nginx如何解释location后面的uri,这会使二者分别以不一样的方式将请求映射到服务器文件上。
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias路径替换location路径
alias是一个目录别名的定义,root则是最上层目录的定义。
还有一个重要的区别是alias后面必需要用“/”结束,不然会找不到文件的。。。nginx
root实例:web
location ^~ /t/ { root /www/root/html/; }
若是一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。api
alias实例:浏览器
location ^~ /t/ { alias /www/root/html/new_t/; }
若是一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/new_t/a.html的文件。注意这里是new_t,由于alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
问题3、由于前端是使用的vue,结果在加载资源的时候碰到浏览器报错:Uncaught SyntaxError: Unexpected token <
具体现象是js文件夹下的全部js变成了文件夹,js目录下的全部js都变成了index.html文件。
try_files $uri $uri/ /index.html;
Nginx里面这段代码引发的。当出错的时候会强制跳转到 index.html 页面,而js文件是不会识别html,所以报Uncaught SyntaxError: Unexpected token < 错误
访问了不存在的js,而后这个404错误又从新指向了一个提示的自定义页面,因为脚本里面不容许出现标签由于标签带了<>符号,因此,就会抛出这个异常 从而报错。
加入以下配置,专门处理js等静态资源文件
location ~ ^/(images|img|javascript|js|css|flash|media|static)/ { alias /external/product/; autoindex on; }
最后修改之后的conf文件配置以下:
user root; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include 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 logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 7070; server_name server7070; location /token{ root /external/product/getToken; try_files $uri $uri/ /index.html =404; } location ~* /token\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /external/product/getToken/; expires 30d; } } server { listen 7071; server_name server7071; location /xy-app-api{ root /external/product/apidoc/xy-app-api; try_files $uri $uri/ /index.html =404; } } server { listen 80; server_name 192.25.106.214; location /app-web/static { alias /external/product/app-web/static; } location /app-web { alias /external/product/app-web; } location ~ ^/(images|img|javascript|js|css|flash|media|static)/ { alias /external/product/; autoindex on; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 6060; server_name server6060; location /portfolio-web/ { alias /external/product/portfolio-web/; } location ~ ^/(images|img|javascript|js|css|flash|media|static)/ { alias /external/product/portfolio-web/; autoindex on; } } server { listen 8095; server_name server8095; location /{ root /portfolio-static-files; } } server { listen 32041; server_name *.*.*.214; charset utf-8; access_log logs/szy.access.log; error_log logs/szy.error.log; location /v1{ proxy_pass http://IP:32041; } proxy_set_header Host $host:32041; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443; # server_name localhost; # ssl on; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_timeout 5m; # ssl_protocols SSLv2 SSLv3 TLSv1; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }