使服务器管理多个站点

Sof*_*mur 2 nginx godaddy wordpress

我在DigitalOcean买了一台专用服务器,配置好了nginx,mysql和php,IP地址是a.b.c.d. 我从GoDaddy:siteone.comsitetwo.com. 我创建了一个子域sub.siteone.com,它将是一个WordPress站点。我发sub.siteone.coma.b.c.dGoDaddy

通过关注这篇文章这篇文章,我将 WordPress 文件放在/var/www/sub.siteone.com/html/. /etc/nginx/sites-available/sub.siteone.com包含以下内容:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/sub.siteone.com/html;
    index index.php index.html index.htm;

    server_name sub.siteone.com;

    location / {
            try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
            root /usr/share/nginx/html;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果,当我sub.siteone.com在浏览器中输入时,它会重定向到a.b.c.dWordPress 网站并显示得很好。

问题是我希望我的服务器 ( a.b.c.d) 包含多个站点(即域)。所以我想象的一种机制是a.b.c.d/one/包含第一个域,并a.b.c.d/two/包含第二个域。其结果,

  • 当我sub.siteone.com在浏览器中输入时,网址保持不变,而内容来自a.b.c.d/one/
  • 当我sub.siteone.com/photos/在浏览器中输入时,url 保持不变,而内容来自a.b.c.d/one/photos
  • 当我sitetwo.com在浏览器中输入时,网址保持不变,而内容来自a.b.c.d/two/
  • 当我sitetwo.com/downloads/在浏览器中输入时,网址保持不变,而内容来自a.b.c.d/two/downloads

谁能告诉我这个机制是否有意义?我如何修改 nginx 和 GoDaddy 的设置来实现这一点?

小智 6

您想要的称为虚拟主机。它的效果比你描述的要好得多!

只需添加server具有不同server_nameroot目录的多个块。server每个域名一个块。请注意,只有其中一个可以标记为,default_server但除此之外,所有块看起来都相同。

最好的方法是为每个站点创建一个文件,然后将每个文件符号链接到/etc/nginx/sites-enabled/. 完成后,重新启动nginxservice nginx restart


小智 5

您可以使用 Nginx 中的服务器块轻松实现这一点,以创建多个“虚拟主机”,每个都具有不同的 HTTP 配置。这通过 Nginx 以不同的方式处理您的请求,具体取决于您用于访问服务器的 URL。

简而言之,要访问 siteone.com,您需要创建server一个server_name值为siteone.com. 每个服务器块可以在它自己的文件中,也可以在同一个文件中,这并不重要。

siteone.com:

server {
    listen 80;
    server_name sub.siteone.com;
    root /var/www/sub.siteone.com/html;
    # ADD ADDITIONAL SITEONE CONFIGURATION HERE
}
Run Code Online (Sandbox Code Playgroud)

sub.siteone.com:

server {
    listen 80;
    server_name sub.siteone.com;
    root /var/www/sub.siteone.com/html;
    # ADD ADDITIONAL SUB.SITEONE CONFIGURATION HERE
}
Run Code Online (Sandbox Code Playgroud)

sitetwo.com

server {
    listen 80;
    server_name sitetwo.com;
    root /var/www/sitetwo.com/html;
    # ADD ADDITIONAL SITETWO CONFIGURATION HERE
}
Run Code Online (Sandbox Code Playgroud)

这应该提供您需要的行为。还值得注意的是,您可以做的不仅仅是为每个服务器使用不同的根目录,为每个虚拟主机设置不同的日志文件、转发请求和更多功能也很有用。

这是一个为 sitetwo.com 提供特定日志文件的粗略示例

server {
    listen      80;
    server_name sitetwo.com;
    root        /var/www/sitetwo.com/html;
    error_log   /var/www/sitetwo.com/logs/error.log;
    access_log  /var/www/sitetwo.com/logs/access.log;
    # ADD ADDITIONAL SITETWO CONFIGURATION HERE
}
Run Code Online (Sandbox Code Playgroud)