我在 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!