使用nginx的多个.conf文件子域

时间:2013-04-01 21:56:20

标签: wordpress dns nginx webserver

在我的域名下,说example.com,我希望有一个目标网页(在点击example.com时会出现),一个WordPress博客(将在blog.example.com生活)和我的以HTML格式恢复(将在resume.example.com生效)。使用nginx,我希望有三个独立的.conf文件,这样我就可以将它们分开来回分开。设置DNS使得“resume”和“blog”是example.com的A记录。

我在Linode上运行它,所以我可以完全控制DNS和Web服务器。但是,当我尝试将blog.example.com的nginx .conf条目拆分为单独的文件时,当我在网络浏览器中点击此内容时,我会从blog.example.com重定向到www.example.com

我知道安装WordPress不是问题,因为当所有三个服务器条目都在一个nginx文件中时,一切正常。我还尝试为博客(blogs-availableblogs-enabled)创建单独的文件夹结构,然后在nginx.conf 之前包含这些文件夹 sites-enabled包括,但这也不起作用。这让我有两个问题:

  1. 有没有人对如何让这个工作有任何建议?也许我的DNS设置不正确。

  2. nginx是否关心加载顺序还是不明确?如果是后者,那么我会将所有内容保存在一个服务器块中,并将它们全部放下或全部放下。

  3. 更新:

    example.com的nginx.conf:

    # Blog (WordPress site - blog.example.com)
    server {
      listen <ip-address>;
      server_name blog.example.com;
      root /www/blog.example.com/public_html/current;
    
      access_log /www/blog.example.com/logs/access.log;
      error_log /www/blog.example.com/logs/error.log;
    
      location / {
        index index.html index.htm index.php;
        try_files $uri $uri/ /index.php;
      }
    
      location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  /www/blog.example.com/public_html/current/$fastcgi_script_name;
    
        if ($uri !~ "^/images/") {
          fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
        }
        fastcgi_index index.php;
      }
    
      location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
      }
    }
    
    # redirect example.com to www.example.com
    server {
      listen <ip-address>;
      server_name example.com;
      rewrite ^(.*)$ $scheme://www.example.com$request_uri? permanent;
      break;
    }
    
    # static site - www.example.com
    server {
      listen <ip-address>;
      server_name www.example.com;
      # static HTML / soon-to-be Sinatra site
      root /www/example.com/public_html/current/public;
    
      access_log /www/example.com/logs/access.log;
      error_log /www/example.com/logs/error.log;
    }
    

    注意:我上面没有resume.example.com网站,但这应该是微不足道的。此外,上述工作的任何顺序,所以我不相信这是一个重定向问题。

    **第二次更新**

    在预感中,我在example.com conf文件中注释掉了以下内容:

    server {
        listen <ip-address>:80;
            server_name example.com;
            rewrite ^(.*)$ $scheme://www.example.com$request_uri? permanent;
            break;
        }
    

    它按预期工作。我的非www - &gt;是否有问题?上面的www重定向规则?

1 个答案:

答案 0 :(得分:0)

对于第二个问题,nginx配置是声明性的。服务器块顺序无关紧要。因此,可以轻松地在自己的.conf文件中管理每个服务器块。

UPDATE 看到nginx配置文件后

找不到nginx conf文件的任何问题。在我的devbox中尝试过,它工作正常。所以它可能来自dns设置。一种可能性是您将“blog”设置为“www”的CNAME记录(cname记录是别名)。如,

blog   IN   CNAME   www

如果是这种情况,网络浏览器会将http://blog.example.com发送给http://www.example.com

另请注意,dns记录可以缓存在浏览器内或isp dns服务器中。即使你修复了一段时间,仍然可以缓存错误的记录。尝试

dig blog.example.com

获取dns设置的一些信息。