nginx实现同一台服务器配置两个网站

我在一台虚拟机上(同一个IP)搭建了LNMP环境,然后部署两个网站(两个域名),分别时www.4spaces.org,www.weiyanzixun.com,域名解析正常,同时开启了https证书。现在的问题是我访问www.4spaces.org这个域名时,经常会跳转到www.weiyanzixun.com这个域名上,请问我的配置问题出在哪里?
环境:

nginx version: nginx/1.12.1

两个域名的nginx配置文件分别如下:

配置1:.4spaces.https.conf

server{
    listen 80;
    server_name 4spaces.org www.4spaces.org;
    add_header Strict-Transport-Security max-age=15768000;
    return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name 4spaces.org www.4spaces.org;
   index  index.php index.html index.htm;
   root   /usr/share/nginx/html;
   add_header X-Frame-Options DENY;
   add_header X-Content-Type-Options nosniff;
 
   ssl_certificate /etc/letsencrypt/live/4spaces.org/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/4spaces.org/privkey.pem;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:10m;
   ssl_session_timeout 60m;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        include        fastcgi_params;
    }

}

配置2:weiyan.https.conf

server{
    listen 80;
    server_name weiyanzixun.com www.weiyanzixun.com;
    #告诉浏览器有效期内只准用 https 访问
    add_header Strict-Transport-Security max-age=15768000;
    #永久重定向到 https 站点
    return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name weiyanzixun.com www.weiyanzixun.com;
   index  index.php index.html index.htm;
   root   /usr/share/nginx/weiyanzixun;
   add_header X-Frame-Options DENY;
   add_header X-Content-Type-Options nosniff;
 
   ssl_certificate /etc/letsencrypt/live/weiyanzixun.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/weiyanzixun.com/privkey.pem;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:10m;
   ssl_session_timeout 60m;


    location / {
        try_files $uri $uri/ /index.php?$args;  #修改内容
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #修改此处内容支持php
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

请哪位大神告诉我问题出在哪里,还有就是这个配置有那些地方可以进行优化的?

阅读 7.9k
5 个回答

这个配置没有问题,建议检查是否有浏览器缓存。

另外建议用curl或者浏览器的开发者工具禁用缓存来测试

http的配置可优化:

server {
    listen 80;
    server_name www.iwwenbo.com iwwenbo.com;
    return 301 https://$server_name$request_uri;
}

楼主的https裸域是301跳转到www的,所以http的配置建议把www放在裸域的前面,减少一次跳转
$server_name只能获取到server_name指令的第一个域名

去掉add_header Strict-Transport-Security max-age=15768000;,所有浏览器在http协议下都是忽略这个头部的,这个头部只有在https协议下才有效
如果需要添加只能添加到https里面

你用 /你的nginx安装路径/bin/nginx -t 检查一下你的配置,报错吗?

两个都是fastcgi_pass 127.0.0.1:9000;会有问题么?

您location并没有指定root(文件目录),以下是我的个人服务器上的配置,供您参考:

server {
    listen 80;
    server_name  *.sosout.com;
    
    if ($host ~* "^(.*?)\.sosout\.com$") {
        set $domain $1;
    }

    location / {
        if ($domain ~* "blog") {
            root /mnt/html/blog;
        }
        if ($domain ~* "strap") {
            root /mnt/html/vueStrap;
        }
        if ($domain ~* "admin") {
            root /mnt/html/admin;
        }
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto  $scheme;
    }
    access_log  /mnt/logs/nginx/access.log  main;
}

不同的域名指向了不同的目录。

一个443就OK了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题