Nginx问题记录

191 阅读2分钟

该文章记录本人在使用nginx中遇过的问题及解决方法,如有错误欢迎批评指正

1、浏览器控制台报错:XMLHttpRequest cannot load ''. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '' is therefore not allowed access.)
  • 原因:跨域,浏览器遵循同源协议,即前端访问后端时,如果后端的协议、ip、端口跟前端有其中一项不一致,浏览器会禁止访问,本身是为了保证浏览器安全,但是前后端分离的项目肯定无法遵守
  • 解决:nginx代理,配一个后端的location在前端项目所在的server内,让前端通过ng的location来访问后端,这种方式访问能保证域名或端口ip一致,遵守同源协议,能避免跨域问题,例子如下:前端部署第一个location中,访问后端时,直接访问127.0.0.1:8077/back即可实现跨域
        server {
            listen 8077;
            location / {
                root   /html;
                index  index.html index.htm;
                try_files $uri $uri/ /index.html;
            }
    		
            location /back/ {
                proxy_pass   http://127.0.0.1:9000;
            }
        }
2、浏览器控制台报错:Uncaught SyntaxError:Unexceted token '<'
  • 原因:有可能是找不到路径,这时候可以在浏览器F12的源代码模块,查看index.html引用的静态资源路径,再去ng部署的前端文件夹里查看,路径是否对得上
  • 解决:创建或移动文件夹,来保证静态资源的路径跟index.html里引用的路径一致;也可以在nginx里配一个location>alias的虚拟路径,来保证index.html能读到静态资源,配置参考如下,/site/static/是index.html中引用的静态资源路径的开头,alias是项目中实际的静态资源路径,注意两个路径最后必须加上斜杠
    location /site/static/ {
        alias   html/static/;
    }
3、header内带下划线的参数没有转发
  • 原因:ng默认不会转发header内带下划线的参数
  • 解决:在server块内开启如下配置:
    underscores_in_headers on;
4、ng日志报错:CreateFile() "XXX" failed (3: The system cannot find the path specified)
  • 原因:这种情况一般就是root或者try_files路径没配对,例如多了或少了斜杠,又或者是文件不存在,日志里会把错误路径打印出来
  • 解决:看日志的详细信息,修改对应配置或补充文件即可
5、前端代码更新部署后,浏览器需要清除缓存才能看到更新内容
  • 原因:浏览器默认会读取缓存
  • 解决:在location块内开启如下配置:
    add_header Cache-Control "no-cache, no-store";

持续更新...