从/ myapp / public / blog主机blog.domain.com,并阻止从我的app.com/blog/*访问?

有一个像下面的服务器设置。 我想限制任何人访问http://myapp.com/blog/index.html这将路由到/public/blog/index.html。 这是可能的,或者我应该真的存储公众以外的博客文件夹? (我不想要)

server { listen 80; server_name myapp.* root /srv/myapp/current/public; } server { listen 80; server_name blog.myapp.* root /srv/myapp/current/public/blog; } 

这确实是可能的。 尝试下面提供的两个选项之一…

 server { listen 80; server_name myapp.* root /srv/myapp/current/public; location /blog { # option 1 return 444; # option 2 # rewrite /blog/(.*) $scheme://blog.myapp.tld/$1 permanent; } } server { listen 80; server_name blog.myapp.* root /srv/myapp/current/public/blog; } 

对这两个选项的一些解释…

return 444是一个Nginx特定的状态码,什么也不返回给浏览器。 参考: http : //en.wikipedia.org/wiki/List_of_HTTP_status_codes 。 如果你想发送另一个状态码,例如403,那么删除444,并把你喜欢的任何代码;

rewrite /blog/(.*) $scheme://blog.myapp.tld/$1 permanent; 将子目录转换为子域。 这已经被回答了。 参考: Nginx重写规则(subdomain到子域)

您可以在http:// nginx.org/en/docs/http/ngx_http_rewrite_module.html#return上了解关于return语句的更多信息,以及http://nginx.org/en/docs/http/ngx_http_rewrite_module中的rewrite语句。 html#重写 。

我希望有帮助。