我在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;
}
答案 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。
我希望这会对其他情况类似的人有所帮助。