Nginx自定义配置

时间:2014-11-03 20:53:32

标签: nginx

我需要我的NGINX配置根据URL做一些独特的事情。

如果网址为:

mydomain.com/blog或mydomain.com/blog /

我需要NGINX在端口2368上提供一个幽灵博客我通过以下方式完成了这个:

location /blog/ {
    proxy_pass http://localhost:2368;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
} 

如果网址为:

mydomain.com/some-article-title

我需要NGINX指向some-article-title.html。我这样做了:

location / {
    try_files $uri $uri/ $uri.html =404;
}

第一个问题:如果网址是mydomain.com/some-article-title/,或者如果情况不同,例如mydomain.com/Some-article-Title,我也希望如此。我怎么能在NGINX中做到这一点?

第二个问题:如果没有匹配的HTML文件,我还需要NGINX重定向到特定的子域,即如果URL是mydomain.com/jimsmith并且没有HTML文件jimsmith.html我需要NGINX将用户带到jimsmith.mydomain.com我该怎么做?

1 个答案:

答案 0 :(得分:0)

location /blog//blog的请求不符,但location /blog会。{/ p>

try_files ...尝试文件。因此,如果您的请求包含一个尾部斜杠,nginx将搜索一个目录(以/结尾的文件只是在任何文件系统上的目录)。

如果您希望nginx在请求包含尾部斜杠时搜索文件,则需要rewrite请求到其预尾随斜杠表单。请注意,目录将不再可访问...因此,下面显示的最通用的表单远非被推荐。无论如何,不​​鼓励任何形式的斜线改写......

location ~* ^(?<article>/[^/]+)/$ {
    return 302 $scheme://$host$article;
}

您不能在文件系统中使用大写或不大写字母的多个文件具有相同的名称,例如some-article-titleSome-article-Title,因此搜索任一名称将始终与现有文件一起成功。< / p>

如果要重定向与try_files第一个参数不匹配的文件,则可以将最后一个用作回退到命名位置,您可以在其中发出重定向(请参阅try_files文档)。

location / {
    try_files $uri $uri/ $uri.html @notexisting;
}

location @notexisting {
    rewrite ^/(?<subdomain>.*)$ $scheme://$subdomain.mydomain.com;
}