【问题标题】:Serve static content through subdomain in nginx通过 nginx 中的子域提供静态内容
【发布时间】:2017-03-07 09:14:46
【问题描述】:

我有一些 slate 文档作为网站,并希望通过如下子域在内部服务器上提供它们:internal-docs.mysite.com。作为记录,访问mysite.com 显示“nginx 正在正常运行”页面。

我创建了一个具有以下路径和名称的配置文件:/etc/nginx/sites-available/internal-docs.mysite.com:

server {
    listen 80;
    server_name internal-docs.mysite.com;

    root /var/www/docs-internal;
    index index.html;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
}

当然,我已将文件放入/var/www/docs-internal。然后我在/etc/nginx/sites-enabled 目录中创建了一个指向uppershown 配置文件的符号链接:

internal-docs.mysite.com -> ../sites-available/internal-docs.mysite.com

然后我重新加载nginx -s reload,但访问 URL 时出现“无法访问此站点”错误。

设置和配置对我来说是正确的(根据我遵循的指导方针),所以这就是我陷入死胡同的原因,有点......

【问题讨论】:

  • 这似乎不是 Nginx 的问题。您的子域是否正确指向服务器(尝试 nslookup 或 ping 您的子域)?
  • @GabrielHautclocq,你是说我设置的配置听起来正确吗?就这样我知道要调查有关该问题的其他内容。
  • 您还应该检查 Nginx 是否具有对您的配置文件的读取权限,以及您的 conf 是否在启用站点的目录中加载 .conf 文件。
  • 糟糕,您没有任何 Listen 指令!
  • 我们还有一个站点以完全相同的方式提供服务,所以我只是按照我们已有的设置进行了操作。我应该让它监听端口80吗?我不确定。另外,我检查了一下,我想我必须将子域添加到防火墙配置中。

标签: nginx


【解决方案1】:

为了别人,我写的配置是正确的,我的问题在于两件事:

  1. 我不得不删除listen 80指令,因为已经有另一个配置文件,它指定nginx应该监听端口80。一个不应该告诉nginx两次监听同一个端口,即使它在两个单独的端口配置文件
  2. /var/www/docs-internal 文件夹的权限。打开文件夹需要x(执行)权限,而打开文件需要r(读取)权限。我必须为这个层次结构中的所有文件夹提供相应的权限,以便可以全局(从每个人)打开内容,这基本上是从浏览器访问它。

【讨论】:

    【解决方案2】:

    您似乎忘记了 Listen 指令。请尝试以下操作:

    server {
        listen 80;
        server_name internal-docs.mysite.com;
    
        root /var/www/docs-internal;
        index index.html;
    
        location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
        }
    
        error_page 404 /404.html;
    }
    

    如果这不起作用,请检查:

    1. 该 Nginx 用户具有对该站点内容的读取权限。例如,如果您的 Nginx 用户是 www 并且您具有 root 访问权限,请执行以下操作:

      # su www
      $ cat /var/www/docs-internal/index.html
      

      如果失败,请确保该位置具有正确的所有权和权限。请注意,要让用户能够浏览目录,该目录必须具有该用户或用户组的执行位。

    2. 该 Nginx 用户对文件 ../sites-available/internal-docs.mysite.com 具有读取权限。例如,如果您的 Nginx 用户是 www 并且您具有 root 访问权限,请执行以下操作:

      # su www
      $ cat /etc/nginx/sites-available/internal-docs.mysite.com
      

      如果失败,请确保配置文件具有正确的所有权。注意:通常 Nginx 主进程由 root 运行,并且该进程产生子进程以 Nginx 用户运行,因此配置文件的权限不太可能成为问题。

    3. 也许你的配置文件名应该以“.conf”结尾(在我的服务器上,我有以下行:include conf.d/*.conf; 所以它会加载任何以“.com”结尾的conf文件。

    4. Nginx 尝试在其主配置文件中加载 ../sites-available/ 中的文件。也许它没有,而是在 conf.d 目录中查找(默认)。

    5. 您可以对子域执行 ping 和 nslookup。如果你不能,那么你必须先修复它(DNS、防火墙......)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 2013-09-23
      • 1970-01-01
      • 2014-07-30
      • 2020-09-20
      相关资源
      最近更新 更多