向Nginx重定向https添加异常

时间:2019-11-18 15:09:27

标签: http nginx redirect

我在nginx的.conf文件中具有以下配置。我是配置Web服务器的新手,因此遇到了一些问题。现在,如果我正确理解,第一个块会将所有内容重定向到https。第二个块是example.com的实际服务器配置,而第三个块将www.example.com重定向到没有www的第二个服务器块。标签。

现在有一个例外,我想在不使用https的情况下访问服务器上的文件夹。因此,如果我键入http://www.example.com/folder/page.php,则不应将网站重定向到https或没有www的纯example.com。我尝试添加

location /folder/page.php
{
    http://www.example.com/folder/page.php
} 

所有服务器块,但实际上没有一个能起到作用。

我非常感谢您提供有关如何解决此问题的建议。预先感谢!

server
{
    listen 80;
    listen [::]:80;
    return 301 https://$host$request_uri;
}

server
{
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com;

    root /data/web/example.com/web;

    location /phpmyadmin
    {
        root /usr/share;
        location ~ \.php$
        {
            include php.conf;
        }

        location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { 
            root /usr/share/; 
        } 
    }

    location /webftp
    {
        root /data/web;
        location ~ \.php$
        {
            include php.conf;
        }
    }
}

server
{
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

2 个答案:

答案 0 :(得分:0)

您尝试过吗?这将做一个完全匹配。为什么要在没有https的情况下访问? 这不是一个好习惯。

 server
  {
    listen 80;
    listen [::]:80;
    return 301 https://$host$request_uri;

    location=/folder/page.php
    {
      proxy_pass http://www.example.com/folder/page.php;
    } 
  }

答案 1 :(得分:0)

所以最终我终于弄清楚了。我将以下内容添加到顶级服务器块:

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

    location /folder/page.php {
         try_files $uri $uri/ =404;
         root /data/web/example.com/web;
         index index.php index.html index.htm default.html default.htm;
         include /etc/nginx/fastcgi_params;

         fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ \.dnl$ {
        root /data/web/example.com/web;
        try_files $uri $uri/ /index.php?$args;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

第一个块“ location /folder/page.php”阻止重定向到https站点。但是,由于我想在此处托管脚本,因此我需要添加相关代码,以便该链接实际执行php脚本,而不仅仅是直接下载它。

然后,我意识到我还在服务器上托管了dnl文件,我希望客户端能够下载该文件。为了解决这个问题,我添加了第二个块“ location〜.dnl $”,这意味着每当请求以.dnl结尾时,该文件就会在给定的文件夹中查找,并再次作为可下载内容提供给客户端。没有https。

我希望这会对其他情况类似的人有所帮助。