首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx配置不工作

Nginx配置不工作
EN

Stack Overflow用户
提问于 2016-11-30 23:30:35
回答 1查看 966关注 0票数 0

我刚刚从Apache转到了nginx,它仍然需要一些习惯(以及大量的学习)。

我正在运行一个Pagekit网站,其配置如下:https://gist.github.com/DarrylDias/be8955970f4b37fdd682

代码语言:javascript
复制
server {
    listen 80;
    listen [::]:80;

    # SSL configuration

    listen 443 ssl;
    listen [::]:443 ssl;

    ssl                 on;
    ssl_certificate     /etc/ssl/private/mydomain.com.crt;
    ssl_certificate_key /etc/ssl/private/mydomain.com.private.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    ssl_client_certificate  /etc/ssl/private/cloudflare.origin-pull-ca.pem;
    ssl_verify_client       on;

    server_name mydomain.com www.mydomain.com;

    root /home/vhosts/domains/mydomain.com/public/;

    index index.php;

    # Leverage browser caching of media files for 30 days
    location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff)\$ {
        access_log off;
        expires 30d;
        add_header Pragma public;
        add_header Cache-Control "public, mustrevalidate, proxy-revalidate";
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # Deny access to sensitive folders
    location ~* /(app|packages|storage|tmp)/.*$ { 
        return 403; 
    }

    # Deny access to files with the following extensions
    location ~* \.(db|json|lock|dist|md)$ { 
        return 403;
    }

    # Deny access to following files 
    location ~ /(config.php|pagekit|composer.lock|composer.json|LICENSE|\.htaccess) { 
        return 403; 
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php7-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param  HTTP_MOD_REWRITE  On;
    }
}

不巧的是,许多文件(包括我)存在这样的问题,即扩展名为js|css|jpg|<etc>的文件由于位于app or packages目录中的任何一个而得到403响应。

我尝试了多次正则表达式,试图在nginx中为这些文件赋予location更高的优先级,但它们似乎没有效果。

如何更改此配置文件,以便允许这类文件,但仍然返回403对所有其他文件在这些目录?

编辑:文件URL看起来像https://example.com/app/js/something.min.js?v=1921,也许因为?v=1921而不能工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-01 00:01:03

根据恩吉克斯文件

nginx按照配置文件中列出的顺序检查正则表达式所给出的位置。

因此,首先,您需要将最后一个location移到顶部。

然后,试图匹配静态文件的正则表达式也是不正确的。美元符号"$“应该与路径的末尾相匹配,但它是由先前的反斜杠"\”转义的(因此它实际上匹配一个字符"$")。删除反斜杠将修复您的问题:

代码语言:javascript
复制
location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff)$ {
    ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40900158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档