制作一个服务器pipe理多个网站

我已经从DigitalOcean购买了一个专用的服务器,并且configuration了nginx ,mysql和php,它的IP地址是abcd 。 我从GoDaddy购买了两个域名: siteone.comsitetwo.com 。 我做了一个子域sub.siteone.com ,它将成为一个WordPress站点。 我把sub.siteone.comGoDaddy abcd

通过以下这篇文章和这篇文章 ,我把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; } } 

因此,当我在浏览器中inputsub.siteone.com时,它会redirect到abcd并显示WordPress网站。

问题是,我想我的服务器( abcd )包含几个网站(即域)。 所以我想象的机制是abcd/one/包含第一个域,而abcd/two/包含第二个域。 结果是,

  • 当我在浏览器中inputsub.siteone.com时,url保持不变,而内容来自abcd/one/ ;
  • 当我在浏览器中input例如sub.siteone.com/photos/时,url保持不变,而内容来自abcd/one/photos ;
  • 当我在浏览器中inputsitetwo.com时,url保持不变,而内容来自abcd/two/ ;
  • 当我在浏览器中input如sitetwo.com/downloads/时,url保持不变,而内容来自abcd/two/downloads

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

您可以使用Nginx中的服务器块轻松实现这一点,以创build多个“虚拟主机”,每个虚拟主机具有不同的HTTPconfiguration。 这是由Nginx根据你用来访问服务器的URL来区别处理你的请求。

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

siteone.com:

 server { listen 80; server_name sub.siteone.com; root /var/www/sub.siteone.com/html; # ADD ADDITIONAL SITEONE CONFIGURATION HERE } 

sub.siteone.com:

 server { listen 80; server_name sub.siteone.com; root /var/www/sub.siteone.com/html; # ADD ADDITIONAL SUB.SITEONE CONFIGURATION HERE } 

sitetwo.com

 server { listen 80; server_name sitetwo.com; root /var/www/sitetwo.com/html; # ADD ADDITIONAL SITETWO CONFIGURATION HERE } 

这应该提供你需要的行为。 同样值得注意的是,你可以为每个服务器使用不同的根目录,而且每个虚拟主机有不同的日志文件,转发请求和更多的function也是很有用的。

这里有一个粗略的例子,为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 } 

你想要的就是所谓的虚拟主机。 它比你所描述的更好!

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

最好的方法是每个站点创build一个文件,然后将每个文件符号链接到/etc/nginx/sites-enabled/ 。 这样做后,重新启动service nginx restart启动nginx

使用Nginx,您应该根据需要创build多个站点configuration文件,只需修改server_name和root语句即可将外部域映射到其内容和代码。

本的答案也不错,这里只是为了多样化的一个select:创build一个服务器,并在里面添加多个位置块指向您的网站的位置。

服务器{

  listen 443 ssl; server_name dev.domainofmysite.com; server_tokens off; location /param { proxy_pass http://127.0.0.1:8888; } location /tparam { proxy_pass http://127.0.0.1:7172; } location /dparam { proxy_pass http://127.0.0.1:7172; } 

}