微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

本地nginx通配符安装不加载JS文件

如何解决本地nginx通配符安装不加载JS文件

我已经在我的本地主机上安装了一个 Nginx 服务器配置。这是一个多商店 PrestaShop 1.6.1.4。您可以在此处查看 Nginx 配置:

server {
listen 80;
listen [::]:80;

root /var/www/html/devsite;
index  index.PHP index.html index.htm;
server_name .devsite.com;

location / {
rewrite ^/api/?(.*)$ /webservice/dispatcher.PHP?url=$1 last;
rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2.jpg last;
rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3.jpg last;
rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last;
rewrite ^/c/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
rewrite ^/c/([a-zA-Z-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1.jpg last;
rewrite ^/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
try_files $uri $uri/ /index.PHP?$args;        
}

# AlphaimageLoader for IE and fancybox
rewrite ^images_ie/?([^/]+)\.(jpe?g|png|gif)$ js/jquery/plugins/fancybox/images/$1.$2 last;

# Web service API
rewrite ^/api/?(.*)$ /webservice/dispatcher.PHP?url=$1 last;

# Installation sandBox
rewrite ^(/install(?:-dev)?/sandBox)/(.*) /$1/test.PHP last;

#Change this block to your admin folder
location /admin {
    if (!-e $request_filename) {
        rewrite ^/.*$ /admin/index.PHP last;
    }
}

# Source code directories
location ~ ^/(app|bin|cache|classes|config|controllers|docs|localization|override|src|tests|tools|translations|travis-scripts|vendor|var)/ {
    deny all;
}
# Prevent exposing other sensitive files
location ~ \.(yml|log|tpl|twig|sass)$ {
    deny all;
}

location ~ \.PHP$ {
    include snippets/fastcgi-PHP.conf;
    fastcgi_pass unix:/var/run/PHP/PHP7.0-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

}

我得出的结论是 Nginx 通配符配置缺少某种配置,但我可能错了,我将快速解释我所看到的:

页面加载正常,管理员工作正常,但有一个模板不会加载相应的 JS,该模板支持客户产品选择过程。

我已经检查了检查器网络调试器,我可以看到在生产环境中正确加载了文件,但它没有像在本地主机环境中那样加载...

感谢您的帮助。

解决方法

你可以检查的东西,对我有用,至少在过去一次:

  • 检查本地环境中的权限,即使用

    namei -nom path/to/jsfile 
    

检查资源路径是否可访问以及所有权是否合适(使用chmodchown进行适当更改)

  • 检查文件本身的权限(可能是应用程序或进程在每次运行服务时都会重写 js 和文件权限)

  • 检查您的生产实例是否不是真正为 js 文件提供服务,而是从以前的状态缓存它。安装一个清除缓存按钮/添加或允许您停用缓存的东西。某些浏览器具有此功能。

  • 根据您的开发环境(是 Django 还是其他东西?),在开发环境和生产环境中服务静态文件可能因设计而异。

  • 检查你在 dev 和 prod 环境中的代码是否真的一样!

  • 停止 prod 环境(如果这不会中断任何实际服务并且不会打扰您的客户)并重新启动它。您是否遇到过同样的问题?

  • 再次检查 prod 和 dev 是否​​查看相同的 nginx 配置文件。重启nginx并重新加载配置

  • 尝试从 dev nginx 配置中删除复杂的正则表达式语句并检查是否可以服务 js 文件

  • 检查 dev 和 prod 静态文件的位置并验证它们在您的配置中是否正确

一旦我想起了一些额外的东西,我就会把它贴在这里。祝你好运!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。