我已经从DigitalOcean购买了一个专用的服务器,并且configuration了nginx ,mysql和php,它的IP地址是abcd 。 我从GoDaddy购买了两个域名: siteone.com和sitetwo.com 。 我做了一个子域sub.siteone.com ,它将成为一个WordPress站点。 我把sub.siteone.com了GoDaddy 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/包含第二个域。 结果是,
sub.siteone.com时,url保持不变,而内容来自abcd/one/ ; sub.siteone.com/photos/时,url保持不变,而内容来自abcd/one/photos ; sitetwo.com时,url保持不变,而内容来自abcd/two/ ; sitetwo.com/downloads/时,url保持不变,而内容来自abcd/two/downloads 谁能告诉我这个机制是否有意义? 我怎么能修改nginx和GoDaddy的设置来实现?
您可以使用Nginx中的服务器块轻松实现这一点,以创build多个“虚拟主机”,每个虚拟主机具有不同的HTTPconfiguration。 这是由Nginx根据你用来访问服务器的URL来区别处理你的请求。
简而言之,要访问siteone.com,您需要创build一个server_name值为siteone.com的server块。 每个服务器块可以在它自己的文件中或在同一个文件中,这并不重要。
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_name和root目录的多个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; }
}