从 /myapp/public/blog 托管 blog.domain.com 并阻止从我的 app.com/blog/* 访问?

从 /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;

}

答案1

这确实是可能的。请尝试以下两个选项之一...

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 重写规则(子目录到子域)

return您可以在以下网址了解有关声明的更多信息http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#returnrewrite以及关于http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite

我希望这能有所帮助。

相关内容