微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

nginx上的多个网站,一个IP

所以我正在使用数字海洋和Nginx.我想托管多个网站(我的项目),但不想为每个网站购买域名.

有没有办法在Nginx和数字海洋上托管多个网站,同时使用那个ip访问它们?

解决方法:

有两种方法可以实现这一目标.您可以通过IP地址,子文件夹位置执行所有操作,或者您需要购买一个域,然后在该域上拥有多个子域(子域名不应该花费任何费用,如果您购买域名,但请咨询您的注册商).

我不建议使用IP地址方法,只是因为必须记住IP地址是非常邪恶的,如果你尝试与其他人共享信息,你也会遇到其他人必须记住IP地址的问题.

one-IP,许多子文件方法,没有域名

NOTICE! We don’t have any information about your projects you are working on. We need to kNow more to determine whether you can do this approach, as many web frameworks will not work without a true domain name tied to it.


WARNING: In ongoing testing of these examples, it was discovered that the “One domain, many subdirectories” approach does not take kindly to reverse-proxying data to the backend, as the requested URI will include the subdirectories within the URI; this might make backend servers have problems behaving properly.

Nginx方面,我们需要对此做一个“邪恶”的方法一个IP地址,许多docroots和子文件夹位置.这是一种非常邪恶的方法,可能会导致一些Web框架出现很多问题.

假设认的Nginx安装作为存储库的基础,那么我们必须创建一个站点配置来处理每个项目子目录请求.然后我们必须将它符号链接到正确的位置.

使用以下内容创建/ etc / Nginx / sites-available / my-projects(使用此作为模板/指南 – 它假设三个项目使用静态HTML而没有PHP或python中的动态Web应用程序或类似项目,您可以复制个人位置块并相应地创建新位置;它还假设您的服务器IP是1.2.3.4).

server {
    listen 80 default_server;

    server_name 1.2.3.4;

    location / {
        return 410;  # Default root of site won't exist.
    }

    location /proj1/ {
        alias /var/www/proj1;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }

    location /proj2/ {
        alias /var/www/proj2;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }

    location /proj3/ {
        alias /var/www/proj3;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }
}

现在我们替换认配置(删除它)并添加我们的:

sudo rm /etc/Nginx/sites-enabled/default
sudo ln -s /etc/Nginx/sites-available/my-projects /etc/Nginx/sites-enabled

然后重启Nginx服务:

# If on 14.04, use this:
sudo service Nginx restart

# If on 15.10 or newer, use this:
sudo systemctl restart Nginx

单域,多子域接近.

This answer section assumes you have one domain and multiple subdomains therein. If you do not have this, please clarify this in your question

对于配置中的每个Nginx服务器{}块,您将需要定义服务器名称,并可能将第四个服务器块设置为其他请求的“全部捕获”.

Example: I have three projects, proj1, proj2, proj3. I have a domain called evil-projects.net (NOTE: Doesn’t exist really). I want three different subdomains, one for each Nginx configuration which will point to one project each. My server resides at 1.2.3.4, and it will serve all sites.

在上面的场景中,我们有两个部分:域和子域,以及服务器配置.

(1):DNS配置

在主机上设置DNS,以便DNS记录符合以下条件:

evil-projects.net  IN A  1.2.3.4
proj1.evil-projects.net  IN A  1.2.3.4
proj2.evil-projects.net  IN A  1.2.3.4
proj3.evil-projects.net  IN A  1.2.3.4

(2):服务器上的Nginx配置(1.2.3.4)

现在为您的Nginx配置.我假设您将拥有认的Nginx设置和存储库中的软件包(我将使用14.04作为基本示例).我们将首先将四个配置文件放入/ etc / Nginx / sites-available中.您可能需要在创建这些文件时使用sudo,因为相关文件夹由root拥有.

/ etc / Nginx / sites-available / catch-all – 这将是任何非有效域的’catch all’.我喜欢返回http错误代码410(GONE).

server {
    listen 80 default_server;

    server_name _;

    return 410;
}

接下来,我们为您的站点/项目设置配置.不过,我会假设它们都是静态文件.这些中的每一个都意味着您在服务器上的每个项目都有不同的Web目录(不同的“文档根”).

/etc/Nginx/sites-available/proj1.evil-projects.net:

server {
    listen 80;

    server_name proj1.evil-projects.net;

    root /var/www/proj1;
    index index.htm index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

/etc/Nginx/sites-available/proj2.evil-projects.net:

server {
    listen 80;

    server_name proj2.evil-projects.net;

    root /var/www/proj2;
    index index.htm index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

/etc/Nginx/sites-available/proj3.evil-projects.net:

server {
    listen 80;

    server_name proj3.evil-projects.net;

    root /var/www/proj3;
    index index.htm index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

然后我们必须从/ etc / Nginx / sites-enabled中删除’default’配置,并添加我们自己的配置.再次,这里需要sudo.

sudo rm /etc/Nginx/sites-enabled/default
sudo ln -s /etc/Nginx/sites-available/proj1.evil-projects.net /etc/Nginx/sites-enabled/
sudo ln -s /etc/Nginx/sites-available/proj2.evil-projects.net /etc/Nginx/sites-enabled/
sudo ln -s /etc/Nginx/sites-available/proj3.evil-projects.net /etc/Nginx/sites-enabled/

然后我们重新启动Nginx进程:

# If on 14.04, use this:
sudo service Nginx restart

# If on 15.04 or newer, use this:
sudo systemctl restart Nginx

DNS传播后,网站将按预期工作.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐