nginx:一台服务器上有多个网站

nginx:一台服务器上有多个网站

我有三个网站,希望通过一台服务器提供服务。服务器是 digitalocean 上的 Ubuntu droplet,网站位于我的主目录中和~/site1 ~/site2~/site3我有带 stock 的 nginx nginx.conf。我在sites-available( site1.com site2.com& site3.com) 中有三个文件,每个文件中根据各自的站点具有以下结构:

server {
    listen 80;
    listen [::]:80;
    root /home/user/site1;
    index.html
    server_name site1.com *.site1.com
    return 301 https://$server_name$request_uri;
}

这三个文件在sites-enabled和 中都进行了符号链接sites-enabled,并且sites-available文件default被删除。此外,站点 2 已附加到两行default_server的末尾listen

Nginx 启动正常,没有错误:

$ sudo nginx -t
$ service nginx restart

但当我访问每个相应的网站时,它们都会将我引导回 default_server site2 网站。网站域名是在 godaddy.com 上购买的,并且都指向该服务器的 IP。

我该如何解决这个问题,以便每个网站都能正确重定向?我对这方面的事情还很陌生,而且是自学成才,所以如果可能的话,一点解释会很有帮助。

以下地方帮助我实现上述目标:

Nginx 阻止多个域将所有流量重定向到 https?

域名重定向到 Nginx 中的错误站点,配置文件中有多个站点

https://www.digitalocean.com/community/questions/multiple-sites-using-nginx

https://stackoverflow.com/questions/11693135/multiple-websites-on-nginx-sites-available

编辑: 我现在尝试过的额外事情是:

  • return 301 https://$server_name$request_uri;从每个文件服务器块中删除该行。

  • 清除了多个浏览器和设备的缓存。

  • 将根路径更改为/var/www/html/site1-2-3

  • SERVERIP site1.comSERVERIP site2.com、添加SERVERIP site3.com/etc/hosts

行为仍然没有变化,仍然重定向到默认服务器

编辑2: 以下是完整的配置文件:

/etc/nginx/sites-available/site1.com

server {
        listen 80;
        listen [::]:80;

        root /home/deploy/site1;

        index index.html index.htm index.nginx-debian.html;

        server_name site1.com *.site1.com;

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

/etc/nginx/sites-available/site2.com

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /home/deploy/site2/current/_site;

        index index.html index.htm index.nginx-debian.html;

        server_name site2.com *.site2.com;

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

/etc/nginx/sites-available/site3.com

server {
        listen 80;
        listen [::]:80;

        root /home/deploy/site3;

        index index.html index.htm index.nginx-debian.html;

        server_name site3.com *.site3.com;

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

/etc/nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml app$

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

编辑3 我注意到 nginx 的版本是 1.10.3,这不是最新的,所以我用 apt-get remove purge 等删除了它。然后我下载并从源 1.12.0 构建,包括整个 ./configure、make、make install 过程,它依赖于一些其他包,但一旦完成并将服务器块放到位,包含在内nginx.conf,我仍然遇到同样的问题,重定向到 default_server。

答案1

我不确定这会有所帮助,但值得一试。在评论中格式化太难了。如果它不起作用,请告诉我,我会再考虑一下或删除答案。

它基本上是一个非常简单的配置,没有什么特别的。

server {
    server_name site1.com www.site1.com;
    listen 80;

    root /home/deploy/site1;
    try_files $uri $uri/ =404;

    index index.html index.htm index.nginx-debian.html;
}

另外,如果它不起作用,请将您的 default_server 语句移至另一台服务器,然后检查所有三个站点。我只是想确保它按预期更改。

答案2

这个问题的解决方案不在于服务器本身的设置,而实际上有两件事,它们是:

  1. 在godaddy界面添加指向ns1.digitalocean.com、ns2.digitalocean.com和ns3.digitalocean.com的自定义域名服务器 godaddy_屏幕截图
  2. 在 digitalocean 界面上,在网络选项卡下为这三个网站添加域名。 digitalocean_屏幕截图

完成后,等待几个小时,一切正常。

相关内容