NGINX 位置块匹配

NGINX 位置块匹配

我在 VestaCP 上运行一个服务器,当您创建 Web 示例时,它会自动格式化 nginx.conf 和 snginx.conf 文件。我进一步修改了这些文件。我正在做的是将所有 URL 重定向到 HTTPS。但是,有几个 URL 需要在端口 80 上,没有 SSL。我已正确配置一个 URL,即 /prosphere

我需要进行另一项配置来将 URL 和所有子 URL 保留在 HTTP 上,但我无法让 NGINX 读取它。

这是我的snginx.conf:

server {
listen      1.1.1.1:443;
server_name example.com www.example.com;
ssl         on;
ssl_certificate      /home/example/conf/web/ssl.example.com.pem;
ssl_certificate_key  /home/example/conf/web/ssl.example.com.key;
error_log  /var/log/httpd/examples/example.com.error.log error;


location = /prosphere {
    return 301 http://www.example.com$request_uri;
}

location = ~*/football/sublimated-uniforms/sublimated-flag-football-jerseys/(.*)$ {
    return 301 http://www.example.com$request_uri;
}

location = /football/sublimated-uniforms/prosphere-uniforms(?:/(.*))?$ {
    return 301 http://www.example.com$request_uri;
}

location / {
    proxy_pass      https://1.1.1.1:8443;
    location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|htm|html|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot$
        root           /home/example/web/example.com/public_html;
        access_log     /var/log/httpd/examples/example.com.log combined;
        access_log     /var/log/httpd/examples/example.com.bytes bytes;
        expires        max;
        try_files      $uri @fallback;
    }
}

这是我的 nginx.conf

server {
listen      1.1.1.1:80;
server_name example.com www.example.com;
error_log  /var/log/httpd/examples/example.com.error.log error;

location / {
    proxy_pass      http://1.1.1.1:8080;
    location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|htm|html|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot$
        root           /home/example/web/example.com/public_html;
        access_log     /var/log/httpd/examples/example.com.log combined;
        access_log     /var/log/httpd/examples/example.com.bytes bytes;
        expires        max;
        try_files      $uri @fallback;
    }

    return 301 https://www.example.com$request_uri;
}

location = /prosphere {
    proxy_pass      http://1.1.1.1:8080;
}

location = /ps-config.html {
    proxy_pass      http://1.1.1.1:8080;
}

location = ~*/football/sublimated-uniforms/sublimated-flag-football-jerseys/(.*)$ {
    proxy_pass      http://1.1.1.1:8080;
}

location = /football/sublimated-uniforms/prosphere-uniforms(?:/(.*))?$ {
    proxy_pass      http://1.1.1.1:8080;
}

我做错了什么?我知道我可以合并这些文件等 - 但我使用的服务器喜欢以这种方式组织它们,我也喜欢。我知道 NGINX 不会查看位置块的顺序,而是第一个匹配 - 我无论如何也无法让 /football/sublimated-uniforms/sublimated-flag-football-jerseys/ 匹配任何东西。它需要匹配以下内容:

/足球/升华制服/升华国旗足球球衣 /足球/升华制服/升华国旗足球球衣/ /足球/升华制服/升华国旗足球球衣/一 /足球/升华制服/升华国旗足球球衣/一/ /足球/升华制服/升华国旗足球球衣/一/ 二 /足球/升华制服/升华国旗足球球衣/一/二/

以及任何其他变量。

提前致谢!

答案1

好吧,这太愚蠢了。我需要删除 = 符号,之前的管理员把它们放在那里,而我却没有注意到。我删除了 = 并添加了 ~*,一切都按预期工作了。谢谢你,Alexy Ten!

相关内容