阿里云产品通用代金券,最高可领1888元代金券分享一波阿里云红包. 阿里云的购买入口
对于访问量不大的服务器,只运行一个网站会不会觉得有点浪费资源,或者说有多个网站要部署,但是只有一台服务器,能不能在一台主机上运行多个网站呢。当然是可以的,可以使用不同的目录区分不同的网站,这种方法好处是比较简单,但是会造成网站文件混乱,在使用框架时可能会产生冲突,使用虚拟主机可以方便的解决这个问题。
准备
- 一个已经备案的域名
- 一台有Nginx的服务器
- ssl证书(不开启HTTPS可以忽略)
-
添加子域名。比如你注册的域名是qiandu.com,可以自己设置多个二级子域名比如m.qiandu.com,api.qiandu.com等等。以阿里云解析为例
记录值选择A,主机记录直接填写二级域名就行,比如二级域名是m.qiandu.com,只要填写m就行。记录值就是服务器ip了,然后确定就可以了。添加了域名后,可以去下载一个免费的ssl证书。 -
配置ssl证书。(不适用HTTPS可以跳过)把从阿里云下载的证书放到服务器上,一边都放在Nginx配置文件的目录中,比如
/etc/nginx
,在这个目录中新建一个目录,比如ssl
,然后把证书放到这里。注意,一定要有可读权限 -
配置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引入
网友评论