测试环境虚拟机周五下午5点左右突然遭遇文件夹漂移事故,虽然是运维的事情,可是项目管理是自己的,周一还需要业务验收,真是头疼死了。
先后碰到若干问题,就不一一详细描述了,本博客只为自己留存备份,若是有人看到博客能顺便解决自己的问题也是举手之劳,若是不对症请不要恶语相向。
问题一、所有请求均报404错误,查看配置都是对的,结果发现是因为Nginx用户启动是nobody引起的,修改nobody之后解决问题。
修改配置nginx.conf,将user从nobody修改为root
user root;
worker_processes 1;
PS:此问题还有可能是Nginx对访问的目录没有访问权限引起的,注意排查。
问题二、注意alias和root配置的正确用法。
root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias路径替换location路径
alias是一个目录别名的定义,root则是最上层目录的定义。
还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。
root实例:
location ^~ /t/ {
root /www/root/html/;
}
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。
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后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
问题三、因为前端是使用的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;
# }
#}
}