赞
踩
一、首先你需要有一台装有Ubuntu系统的PC或VPS,然后还要安装Apache2:
1. 终端下安装Apache2:
- #安装apache2
- ubuntu@ip:~$sudo apt install apache2
2. 安装完成后进入/var/www建立站点目录,Apache2安装完成后默认会在/var目录下创建/www/html目录,如果只建立一个站点可以不做修改,如果是多个站点,那么就需要将html目录修改成便于区别的名字,例如“site1”和“site2”等,然后
- #进入www目录
- ubuntu@ip:~$ cd /var/www
- #修改目录用mv命令
- ubuntu@ip:/var/www$sudo mv html site1
- #建立第二个站点目录
- ubuntu@ip:/var/www$sudo mkdir site2
3. 站点目录处理完后将编辑好的网站源码复制到站点目录下,远程连接的话可以用WinSCP或FileFTP等软件上传。如果只是测试,那么可以在两个目录下分别新建两个index.html文件,为了区别不同网址打开的不同目录站点,index.html中的内容要有区别。
- #进入站点目录
- ubuntu@ip:~$ cd /var/www/site1
- #新建index.html主页文件
- ubuntu@ip:/var/www/site1$sudo vi index.html
- #按“Insert”插入文本
- This is site1 page
- ~
- ~
- ~
- ~
- ~
- --INSERT-- 1,1 ALL
Esc退出编辑,输入“:wq”写入并退出。
4. 定义网址指向的目录,编辑000-default.conf
- #进入/etc/apache2/sites-available,编辑站点指向文件
- ubuntu@ip:/etc/apache2/sites-available$sudo vi 000-default.conf
- #将以下代码前的注释取消
- <VirtualHost *:80>
- ServerName www.website1.com
- ServerAdmin webmaster@localhost
- DocumentRoot /var/www/site1
-
- #这是第二个站点的指向
- ServerName www.website2.com
- ServerAdmin webmaster@localhost
- DocumentRoot /var/www/site2
- </VirtualHost>
- #输入“:wq”回车保存并退出编辑
- #启动rewrite mod
- ubuntu@ip:/etc/apache2/sites-available$sudo a2enmod rewrite
- #重启Apache2服务
- ubuntu@ip:/etc/apache2/sites-available$sudo service apache2 restart
此时两个站点已经建好了,在终端可以用“lynx www.website1.com”命令查看你的网站,可能会让你安装“lynx”组件。
二、加入SSL证书
网站建好了,但浏览器打开时显示不安全,没有证书,给人感觉很不好,这时候你需要申请建站必备的SSL证书,Apache2本身可以创建证书,但目前大多浏览器对Apache2生成的证书很不友好,所以建议去申请权威机构的证书,免费收费都可以,看个人财力,这里以腾讯云为例。
登录腾讯云,进入控制器,搜索“SSL证书”,全中文界面,无需赘述,申请亚信的一年免费证书,申请过程中你需要在你的域名DNS里添加一条识别记录,让腾讯云知道你对域名有绝对的控制权,解析记录添加也略过。
记录添加完以后稍等片刻就会收到验证通过的短信和邮件通知,这时候继续下一步,很快就会申请成功,然后根据自己的服务器类型下载相应的证书文件,这里以Apache2为例,证书压缩包解压后得到四个文件,这里要用到“website1.com.crt”、“website1.com.key”和“root_bundle.crt”这三个文件,下面开始介绍证书的添加方式。
1. 建立SSL目录,可以直接在apache2的目录下建一个SSL文件夹,如果是多个站点就在SSL目录下再建相应数量的子目录:
- #在/etc/apache2下创建SSL目录
- ubuntu@ip:/etc/apache2$sudo mkdir ssl
- #在/etc/apache2/ssl下创建不同站点的子目录
- ubuntu@ip:/etc/apache2/ssl$sudo mkdir site1 #以及site2等
2. 目录创建完成后可以用FTP软件将前文提到的三个证书文件上传到SSL目录下的子目录里。
3. 修改/etc/apache2/sites-available下defualt-ssl.conf文件
- #编辑defualt-ssl.conf
- ubuntu@ip:/etc/apache2/sites-acailable$sudo vi defualt-aal.conf
- #每个网站都要单独写一组<VirtualHost>……</VirtualHost>区间的代码
- #将以下行的注释取消
- <IfModule>
- <VirtualHost _default_:443>
- ServerAdmin webmaster@localhost
- ServerName www.website1.com #指定对应的域名
- DocumentRoot /var/www/site1 #指定对应的站点目录
-
- ErrorLog ${APACHE_LOG_DIR}/error.log
- CustomLog ${APACHE_LOG_DIR}/access.log combined
-
- SSLEngine on
- #将以下行修改为你的站点SSL证书所在目录
- SSLCertificateFile /etc/apache2/ssl/site1/website1.crt
- SSLCertificateKeyFile /etc/apache2/ssl/site1/website1.key
- SSLCertificateChainFile /etc/apache2/ssl/site1/root_bundle.crt
-
- <FilesMatch "\.(cgi|shtml|phtml|php)$">
- SSLOptions +StdEnvVars
- </FilesMatch>
- <Directory /usr/lib/cgi-bin>
- SSLOptions +StdEnvVars
- </Directory>
- </VirtualHost>
-
- #第二个站点SSL证书指向代码
- <VirtualHost _default_:443>
- ServerAdmin webmaster@localhost
- ServerName www.website2.com #指定对应的域名
- DocumentRoot /var/www/site2 #指定对应的站点目录
-
- ErrorLog ${APACHE_LOG_DIR}/error.log
- CustomLog ${APACHE_LOG_DIR}/access.log combined
-
- SSLEngine on
- #将以下行修改为你的站点SSL证书所在目录
- SSLCertificateFile /etc/apache2/ssl/site2/website2.crt
- SSLCertificateKeyFile /etc/apache2/ssl/site2/website2.key
- SSLCertificateChainFile /etc/apache2/ssl/site2/root_bundle.crt
-
- <FilesMatch "\.(cgi|shtml|phtml|php)$">
- SSLOptions +StdEnvVars
- </FilesMatch>
- <Directory /usr/lib/cgi-bin>
- SSLOptions +StdEnvVars
- </Directory>
- </VirtualHost>
- #如果某个网站打开时不能加载上SSL证书,可对其单独再写一个<VirtualHost>的区间代码,例如“website2.com"
- <VirtualHost _default_:443>
- ServerAdmin webmaster@localhost
- ServerName website2.com #指定对应的域名,无"www"
- DocumentRoot /var/www/site2 #指定对应的站点目录
-
- ErrorLog ${APACHE_LOG_DIR}/error.log
- CustomLog ${APACHE_LOG_DIR}/access.log combined
-
- SSLEngine on
- #将以下行修改为你的站点SSL证书所在目录
- SSLCertificateFile /etc/apache2/ssl/site2/website2.crt
- SSLCertificateKeyFile /etc/apache2/ssl/site2/website2.key
- SSLCertificateChainFile /etc/apache2/ssl/site2/root_bundle.crt
-
- <FilesMatch "\.(cgi|shtml|phtml|php)$">
- SSLOptions +StdEnvVars
- </FilesMatch>
- <Directory /usr/lib/cgi-bin>
- SSLOptions +StdEnvVars
- </Directory>
- </VirtualHost>
- </IfModule>
4. "Esc"退出编辑模式,":wq"写入并退出,启用Apache默认SSL主机
ubuntu@ip:/etc/apache2/sites-available$sudo a2ensite defualt-ssl
之后重启Apache服务
ubuntu@ip:/etc/apache2/sites-available$sudo service apache2 restart
浏览器访问刚添加的两个域名,在地址栏开头会显示小锁头标志,说明SSL证书已加载。
三、强制转换“http”为“https”
当在浏览器地址栏中输入“www.website1.com”时,浏览器一般都默认将地址前加上“https://”,但如果输入“http://www.website1.com”时,浏览器则不会自动转为“https”,这时候就需要在配置文件中修改几行代码将来自80端口的访问强制转到443端口,代码如下:
- #修改000-default.conf中的代码,
- ubuntu@ip-172-31-0-251:/etc/apache2/sites-available$sudo vi 000-default.conf
- #在<virtualHost *:80>代码区间加入以下内容:
-
- RewriteEngine on
- RewriteCond %{HTTPS} !=on
- RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]
"Esc"退出编辑模式,":wq"写入并退出,启动rewrite mod
ubuntu@ip-172-31-0-251:/etc/apache2/sites-available$sudo a2enmod rewrite
重启Apache服务
ubuntu@ip:/etc/apache2/sites-available$sudo service apache2 restart
四、建议将两个网站的配置文件分开,避免访问A域名却显示的是B域名的内容,方法:
将“000-defualt.conf”复制一份为"site2.conf",然后将“site2.conf”文件中的site1部分删除,相同也要把“000-defualt.conf”中的site2部分删除,注意:每个site的配置文件的<VirtualHost>代码区间都要包含“http”强制转“https”的代码,每个站点完整有效的配置代码如下:
Site1
- <VirtualHost *:80>
- ServerName www.website1.com
- ServerAdmin webmaster@localhost
- DocumentRoot /var/www/site1
-
- RewriteEngine on
- RewriteCond %{HTTPS} !=on
- RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]
-
- ErrorLog ${APACHE_LOG_DIR}/error.log
- CustomLog ${APACHE_LOG_DIR}/access.log combined
- </VirtualHost>
Site2
- <VirtualHost *:80>
- ServerName www.website2.com
- ServerAdmin webmaster@localhost
- DocumentRoot /var/www/site2
-
- RewriteEngine on
- RewriteCond %{HTTPS} !=on
- RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]
-
- ErrorLog ${APACHE_LOG_DIR}/error.log
- CustomLog ${APACHE_LOG_DIR}/access.log combined
- </VirtualHost>
更多站点可依此类推,注意:配置文件修改完后要执行“sudo a2enmod rewrite”,之后重启Apache2服务。
至此就大功告成了,两个网站经全部部署完成了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。