nginx php 文件正在被浏览器下载,尚未处理

nginx php 文件正在被浏览器下载,尚未处理

我一直绞尽脑汁想要弄清楚这一点。

我正在尝试添加指向 wordpress 博客的 /knowledge 子目录。但是 nginx 不会处理这些文件,而是将它们提供给浏览器进行下载。

请帮忙!

server {
    listen      80;
    listen   [::]:80;
    server_name domain.com;

    return 301 https://domain.com$request_uri;
 }

server {
    listen 443  ssl;
    server_name domain.com;

    ssl_certificate    /etc/ssl/domain_com-bundle.crt;
    ssl_certificate_key    /etc/ssl/domain_com.key;

    root /opt/domain.com/public/;

     location / {
        try_files $uri @backend;
      }


    location @backend {
      proxy_pass http://127.0.0.1:3030;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
    }

    #knowledge wordpress config

    location ^~ /knowledge {
        alias /opt/domainWordpress/;
        index index.php index.html index.htm;
        try_files $uri $uri/ knowledge/index.php?q=$uri&$args;
      }

      location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}

答案1

nginx 使用单个location块处理请求。你应该继续阅读nginx 如何处理请求

您的问题在于处理您的 URI 的位置(/knowledge[...])与处理针对 PHP 的位置不同(/[...].php我想是的)。

由于你使用了特殊^~ location操作符,location在选择最适合处理请求的块时,不会检查正则表达式块(如果此块匹配)。由于您的请求由此块(最长前缀)处理,因此它只会从磁盘处理文件,默认 MIME 类型已配置。

您可以尝试在块location ~ \.php$内嵌套块。location ^~ /knowledge

相关内容