基于Apache2的WEB服务器搭建

网络服务搭建篇 其三

前文:
DNS服务器搭建
DHCP服务器搭建

环境

云服务器

  • IP:154.209.235.33
  • 系统:Ubuntu 18.04 x86_64
  • 状态:已配置好并能够以root用户登录

域名:nos.linzyjx.com,已经添加了A记录154.209.235.33

1556888357154

目标

使用apache建立一个虚拟网站,使用指定域名,并启用https(事先申请好了证书)。

步骤

安装apache服务器

apt update
apt install apache2

安装完成后使用浏览器访问154.209.235.33,查看网页是否正常

1556887846799

可以看见网页正常加载。在该页面中,我们可以看见网站的根目录在/var/www/html下,配置文件目录在/etc/apache2

为了安全起见,我们将该默认网页替换掉。

mv /var/www/html/index.html /var/www/html/index.html.bak
nano /var/www/html/index.html

替换后的index.html内容:

<h1>It Works!</h1>

重新访问154.209.235.33

1556888144900

创建虚拟主机

/var/www中新建目录nos.linzyjx.com,这是域名的根目录

mkdir -p /var/www/nos.linzyjx.com/public_html

我们在该目录下放置一个简单的测试文件

nano /var/www/nos.linzyjx.com/public_html/index.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Welcome to nos.linzyjx.com</title>
  </head>
  <body>
    <h1>Success! nos.linzyjx.com home page!</h1>
  </body>
</html>

为避免任何权限问题,我们可以将目录的所有权更改为 apache 用户(www-data)

chown -R www-data: /var/www/nos.linzyjx.com

添加虚拟主机配置文件/etc/apache2/sites-available/nos.linzyjx.com.conf

<VirtualHost *:80>
    ServerName nos.linzyjx.com
    ServerAlias www.nos.linzyjx.com
    ServerAdmin linzyjx@gmail.com
    DocumentRoot /var/www/nos.linzyjx.com/public_html

    <Directory /var/www/nos.linzyjx.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/nos.linzyjx.com-error.log
    CustomLog ${APACHE_LOG_DIR}/nos.linzyjx.com-access.log combined
</VirtualHost>
  • ServerName:应与此虚拟主机配置匹配的域。 这应该是您的域名。
  • ServerAlias:也应与此虚拟主机匹配的所有其他域,例如www子域。
  • DocumentRoot:Apache将从中提供域文件的目录。
  • Options:该指令控制特定目录中可用的服务器功能。

    • -Indexes:防止目录列表。
    • FollowSymLinks:此选项告诉您的Web服务器遵循符号链接。
  • AllowOverride:指定.htaccess文件中声明的哪些指令可以覆盖配置指令。
  • ErrorLog,CustomLog:指定日志文件的位置。

使用a2ensite程序帮助应用配置

 a2ensite nos.linzyjx.com

测试配置语法是否正确:

apachectl configtest

1556889348896

重启apache2服务应用配置

systemctl restart apache2

(由于这个域名加入了HSTS预载名单,所以无法使用http访问,只能使用https)

启用HTTPS

事先已经准备好了证书

1556889548780

使用以下命令启用mod_ssl、mod_headers和HTTP/2模块:

a2enmod ssl
a2enmod headers
a2enmod http2

创建/etc/apache2/conf-available/ssl-params.conf配置文件(为了提高SSL安全性)

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off

启用配置文件

a2enconf ssl-params

重新加载apache使模块生效

systemctl reload apache2

将含有证书文件的目录上传到/etc/ssl目录下

1556890005004

编辑之前那个虚拟主机配置文件/etc/apache2/sites-available/nos.linzyjx.com.conf,在文件末尾添加:

<VirtualHost *:443>
  ServerName nos.linzyjx.com
  ServerAlias www.nos.linzyjx.com

  Protocols h2 http:/1.1

  <If "%{HTTP_HOST} == 'www.nos.linzyjx.com'">
    Redirect permanent / https://nos.linzyjx.com/
  </If>

  DocumentRoot /var/www/nos.linzyjx.com/public_html
  ErrorLog ${APACHE_LOG_DIR}/nos.linzyjx.com-error.log
  CustomLog ${APACHE_LOG_DIR}/nos.linzyjx.com-access.log combined

  SSLEngine On
  SSLCertificateFile /etc/ssl/nos.linzyjx.com/cert.pem
  SSLCertificateKeyFile /etc/ssl/nos.linzyjx.com/privkey.pem
  SSLCertificateChainFile /etc/ssl/nos.linzyjx.com/chain.pem

  # Other Apache Configuration

</VirtualHost>
  • SSLCertificateFile是证书公钥文件
  • SSLCertificateKeyFile是证书的私钥文件
  • SSLCertificateChainFile是证书链文件

这个配置在443端口上也建立了一个虚拟主机,并且将www.nos.linzyjx.com这个域名重定向到nos.linzyjx.com,并且启用了SSL。

重新加载Apache服务

systemctl reload apache2

测试

访问域名nos.linzyjx.com

1556890980161

参考资料

如何在 Ubuntu 18.04 上设置 Apache 虚拟主机

在 Ubuntu 18.04 上使用 Let's Encrypt 来保护 Apache

Last modification:June 8th, 2019 at 04:15 pm

Leave a Comment