AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 714844
Accepted
SoftTimur
SoftTimur
Asked: 2015-08-18 14:52:37 +0800 CST2015-08-18 14:52:37 +0800 CST 2015-08-18 14:52:37 +0800 CST

使服务器管理多个站点

  • 772

我从 DigitalOcean 买了一个专用服务器,并配置nginx了 mysql 和 php,它的 IP 地址是a.b.c.d. 我从GoDaddy:siteone.com和. 购买了两个域名sitetwo.com。我做了一个子域sub.siteone.com,它将是一个WordPress站点。我提出sub.siteone.com来a.b.c.d。GoDaddy

通过关注这篇文章和这篇文章,我将 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;
    }
}

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

问题是我希望我的服务器 ( 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/在浏览器中输入时,URL 保持不变,而内容来自a.b.c.d/two/downloads

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

nginx
  • 4 4 个回答
  • 290 Views

4 个回答

  • Voted
  1. Emil Vikström
    2015-08-21T02:37:11+08:002015-08-21T02:37:11+08:00

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

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

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

    • 6
  2. Best Answer
    Ben Fairless
    2015-08-25T10:08:37+08:002015-08-25T10:08:37+08:00

    您可以使用 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
    }
    

    sub.siteone.com:

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

    网站二网

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

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

    这是为 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
    }
    
    • 5
  3. ma.tome
    2015-08-21T02:36:58+08:002015-08-21T02:36:58+08:00

    使用 Nginx,您应该根据需要创建尽可能多的站点配置文件,并简单地修改 server_name 和 root 语句以将外部域映射到它们的内容和代码。

    • 1
  4. Aakash Uniyal
    2017-04-29T03:58:09+08:002017-04-29T03:58:09+08:00

    Ben 的回答也很好,这里有一个替代方案,只是为了多样化:创建一个服务器并在其中添加多个指向您网站位置的位置块。

    服务器{

       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;
       }
    

    }

    • 0

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve