Linux下Nginx的HTTPS+多站点 虚拟主机配置

96
紫葡萄0
2019.01.18 17:46 字数 812

阿里云产品通用代金券,最高可领1888元代金券分享一波阿里云红包. 阿里云的购买入口

对于访问量不大的服务器,只运行一个网站会不会觉得有点浪费资源,或者说有多个网站要部署,但是只有一台服务器,能不能在一台主机上运行多个网站呢。当然是可以的,可以使用不同的目录区分不同的网站,这种方法好处是比较简单,但是会造成网站文件混乱,在使用框架时可能会产生冲突,使用虚拟主机可以方便的解决这个问题。

准备
  • 一个已经备案的域名
  • 一台有Nginx的服务器
  • ssl证书(不开启HTTPS可以忽略)
  1. 添加子域名。比如你注册的域名是qiandu.com,可以自己设置多个二级子域名比如m.qiandu.comapi.qiandu.com等等。以阿里云解析为例


    记录值选择A,主机记录直接填写二级域名就行,比如二级域名是m.qiandu.com,只要填写m就行。记录值就是服务器ip了,然后确定就可以了。添加了域名后,可以去下载一个免费的ssl证书。

  2. 配置ssl证书。(不适用HTTPS可以跳过)把从阿里云下载的证书放到服务器上,一边都放在Nginx配置文件的目录中,比如/etc/nginx,在这个目录中新建一个目录,比如ssl,然后把证书放到这里。注意,一定要有可读权限

  3. 配置Nginx。根据自己的具体情况,进入Nginx的配置文件目录,一般是/etc/nginx。一般会有一个conf.d目录或者vhost目录,什么名无所谓,只要是没有被占用的就行,然后编辑nginx.conf,在http节点中添加include /etc/nginx/conf.d/*.conf;
    在conf.d目录中添加一个配置文件,为了方便区分,一般都以域名作为文件名,比如域名为m.qiandu.com,新建m.qiandu.com.conf。然后添加配置信息

server
{
    listen 80;
    server_name m.qiandu.com;
    index index.html index.htm index.php default.html default.htm default.php;
    root  /home/www/m.qiandu.com;
    include php.conf;
    include rewrite/thinkphp.conf;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
    }

    location ~ .*\.(js|css)?$
    {
        expires      12h;
    }

    location ~ /.well-known {
        allow all;
    }

    location ~ /\.
    {
        deny all;
    }

    access_log off;
}

server
{
    listen 443 ssl http2;
#listen [::]:443 ssl http2;
    server_name m.qiandu.com;
    index index.html index.htm index.php default.html default.htm default.php;
    root  /home/www/m.qiandu.com;
    ssl on;
    ssl_certificate   /etc/nginx/ssl/m.qiandu.com.pem;
    ssl_certificate_key  /etc/nginx/ssl/m.qiandu.com.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    include php.conf;
    include rewrite/thinkphp.conf;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
    }

    location ~ .*\.(js|css)?$
    {
        expires      12h;
    }

    location ~ /.well-known {
        allow all;
    }

    location ~ /\.
    {
        deny all;
    }

    access_log off;
}

第一个server是HTTP的配置,第二个是HTTPS的配置。
server_name m.qiandu.com;是匹配的域名,只有当域名是m.qiandu.com 访问时,才会响应.
root /home/www/m.qiandu.com; 是网站文件的的目录,注意,Nginx对这个目录有读写权限
include是引入别的配置信息,我用的php,就引入了php的配置信息,还有重写配置。这个根据需要选择配置
php.conf

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

有一些location是针对静态文件的访问控制。
配置完,保存。
service nginx restart 重启服务器,访问以下试试

总结

以上是Nginx虚拟主机的配置方法,只要你服务器能负载,可以配置多个站点,方法一样,添加配置文件就行
其实所有的配置文件都可以写在nginx.conf文件中,但是为了方便阅读和修改,一般都是写在多个文件中,通过include引入

Linux 从入门到懵逼
Web note ad 1