当前位置:TranBon博客 > 首页 > 技术 > 使用Apache搭建网页服务

使用Apache搭建网页服务

adminis3年前 (2021-02-22)技术26850

第一章:HTTP基本配置

一、Apache简介

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行,由于其跨平台和安全性(尽管不断有新的漏洞被发现,但由于其开放源代码的特点,漏洞总能被很快修补。因此总合来说,其安全性还是相当高的)。被广泛使用,是最流行的Web服务器软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

软件图标

二、安装Apache

#安装 httpd
yum -y install httpd

#删除默认欢迎页面
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak

三、配置httpd

vi /etc/httpd/conf/httpd.conf

#改变管理员的邮箱地址,不是必需,但建议改为你的ServerAdmin [email protected]

#改变域名信息
ServerName www.example.com:80

四、创建一个HTML测试页

vi /var/www/html/index.html

<html>
<body>
<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">
Welcome access www.example.com,This is Test Page!
</div>
</body>
</html>

:wq退出vi

五、启动服务

systemctl start httpd
systemctl enable httpd

六、防火墙允许HTTP/HTTPS服务

https采用TCP443端口,随后会有配置指引,强烈建议加密

firewalld:

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

iptables:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
service iptables save
service iptables reload

七:在其它电脑上浏览器访问,假设你服务器的IP为192.168.1.100

http://192.168.1.100

如果你想使用域名访问,需要在测试电脑上修改hosts文件,Windows的hosts文件位置C:\Windows\System32\drivers\etc\hosts
用记事本打开增加以下内容,如果权限问题,把文件复制到桌面修改完后再放回原位
192.168.1.100 www.example.com

在浏览器上打开www.example.com

第二章:使用http协议分享文件

Step1:创建共享文件夹并设置权限

mkdir /myweb
chmod 755 /myweb
touch /myweb/test.txt

Step2:修改/etc/httpd/conf/httpd.conf

vi /etc/httpd/conf/httpd.conf

#把DocumentRoot "/var/www/html"改为DocumentRoot "/myweb"

#在

<Directory />
    AllowOverride none
   Require all denied
</Directory>

下面增加

    <Directory "/myweb">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    Require all granted
    </Directory>

#并确保配置文件的有这行解决乱码问题,默认有的:
AddDefaultCharset utf-8

Step3:关闭SELinux,或者自行解决权限

vi /etc/selinux/config
SELINUX=enforcing改为SELINUX=disable
:wq退出vi

执行命令:
setenforce 0

Step4:设置防火墙

#如果之前设置过,就不需要再设置
firewalld:

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

iptables:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
service iptables save
service iptables reload

Step5:重启httpd

systemctl restart httpd

Step6:在其它电脑上用浏览器试试

应该可以看到刚刚创建的test.txt

以后把文件放在/myweb里就可以通过浏览器分享了

第三章:利用HTTPS加密网页内容

安装SSL模块

yum -y install mod_ssl

利用OpenSSL来产生一张自我签署的证书。要创建证书,你必须是 root 用户,或在指令前面使用sudo

产生私钥

openssl genrsa -out ca.key 2048

产生 CSR

openssl req -new -key ca.key -out ca.csr

##会有以下交互设置

#国家
Country Name (2 letter code) [XX]:CN

#省
State or Province Name (full name) []:GuangDong

#市
Locality Name (eg, city) [Default City]:GuangZhou

#公司名
Organization Name (eg, company) [Default Company Ltd]:IBM

#部门
Organizational Unit Name (eg, section) []:TECH

#名字,一般用域名,比如example.com
Common Name (eg, your name or your server’s hostname) []:XXXX

#邮件
Email Address []:[email protected]

#以下不设置,回车
A challenge password []:

#以下不设置,回车
An optional company name []:

产生自我签署的金钥

openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

复制文件到对应位置

cp ca.crt /etc/pki/tls/certs
cp ca.key /etc/pki/tls/private/ca.key
cp ca.csr /etc/pki/tls/private/ca.csr

警告:如果你采用 SELinux,请确保你复制这些文件而不是迁移它们。否则这些文件将不符合SELinux政策,程序无法读取这些证书文件。

假如你迁移了这些文件而不是复制它们,你可以用以下的指命来适应SELinux策略

restorecon -RvF /etc/pki

更新Apache SSL的配置

vi +/SSLCertificateFile /etc/httpd/conf.d/ssl.conf

##############

#指定证书路径
SSLCertificateFile /etc/pki/tls/certs/ca.crt

#指定证书路径
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

#############
:wq退出vi

重启Apache

systemctl restart httpd

用浏览器测试,看看有没有提示证书问题,如果有提示,就证明设置成功。

https://XXXXXXX

!!由于证书是自我签署的,浏览器不会信任。如果想要申请一个浏览器信任的SSL证书,请到正规SSL证书颁发机构申请。

第四章:强制跳转HTTPS

vi /etc/httpd/conf/httpd.conf

#加入Rewrite开头的三行参数,/myweb代表网站目录#

<Directory "/myweb">
  Options Indexes FollowSymLinks #如果是搭建共享文件服务器,加入这行
  AllowOverride None
  Order allow,deny
  Allow from all
   Require all granted
  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>

:wq退出vi

重启Apache

systemctl restart httpd

用浏览器输入:
http://XXXXXXXX
看看会不会自动跳转到https

第五章:使用虚拟主机

一个网页服务虚拟出多个网站有三种方法:
只有一张网卡多个IP,每个网站占用一个IP。比如A站用192.168.1.1 , B站用192.168.1.2
只有一张网卡一个IP,每个网站占用一个独立端口。比如A站8080,B站8081
一张网卡一个IP,每个网站独立域名。比如a.com,b.com,都是相同IP相同端口,但浏览器看到的是两个网站。

第一种方式,需要多个公网IP。
第二种方式,最终用户使用不方便,打开网站时需要输入端口号。比如www.sitea.com:8080
第三种方式,是比较折衷的方法。

以下演示第三种方式,其它方式大同小异,下面也有配置模版

#/etc/httpd/conf/httpd.conf是全局定义,如果你只有一个网站,在这里指定即可,如果你有多个站点,建议你分开单独的配置文件定义不同的虚拟网站。
vi /etc/httpd/conf/httpd.conf

#定义监听端口,默认已经设置好,请检查
Listen 80

#安全设置,禁止访问根目录,保留以下设置,请检查

<Directory />
    AllowOverride none
    Require all denied
</Directory>

#注释全局设置,即前面加#
#ServerName www.example.com:80

#注释掉全局设置,即前面加#
#DocumentRoot "/var/www/html"

#注释其它以<Directory “XXXX”>开头,以结尾的所有字段的配置,即前面加#

#<Directory "XXXX">
#  Options Indexes FollowSymLinks
#  AllowOverride None
#  Order allow,deny
#  Allow from all
#</Directory>

#完成以上设置后,我们需要另行配置文件定义各个网站

#新建一个站点文件sitea.conf:
vi /etc/httpd/conf.d/sitea.conf

##以www.sitea.com,公网地址以192.168.1.100为例

##强烈建议你的<Directory “XXXXXXX”>要和DocumentRoot一致,因为这段Directory是apache对该目录访问权限的设置,只有设置正确的目录,DocumentRoot才会生效。

NameVirtualHost *:80
<VirtualHost 192.168.1.100:80>
ServerName www.sitea.com
ServerAdmin [email protected]
DocumentRoot "/var/www/sitea"
AddDefaultCharset UTF-8
ErrorLog "logs/www.sitea.com_error.log"
CustomLog "logs/www.sitea.com_access.log" combined
    <Directory "/var/www/sitea">
    AllowOverride None
        Order allow,deny
        Allow from all
      #Options Indexes FollowSymLinks#如果搭建文件服务器,要删除前面的符号#
    Require all granted
    </Directory>
  <IfModule dir_module>
    DirectoryIndex index.html
   </IfModule>
   <Files ".ht*">
    Require all denied
    </Files>
</VirtualHost>

以同样的方法建立/etc/httpd/conf.d/siteb.conf配置,只需要把所有的sitea处改为siteb即可,其它不变。

确保sitea和siteb都有相关的网页文件用于测试,比如写两个不同的index.html测试页,上面有方法。

#在服务器上修改hosts文件,假设当前服务器的IP地址为192.168.1.100,两个网址中间有空格
vi /etc/hosts

#最后一行加入以下内容
192.168.1.100 www.sitea.com www.siteb.com

#如果你决定要使用SELinux,执行以下命令

chcon -R -t httpd_sys_content_t /var/www/sitea
chcon -R -t httpd_sys_content_t /var/www/siteb

#重启HTTP服务
systemctl restart httpd

#设置防火墙

#如果之前设置过,就不需要再设置

firewalld:

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

iptables:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
service iptables save
service iptables reload

#在其它电脑上同样要修改hosts文件,Windows的hosts文件位置C:\Windows\System32\drivers\etc\hosts
用记事本打开增加以下内容,如果权限问题,把文件复制到桌面修改完后再放回原位

192.168.1.100 www.sitea.com
192.168.1.100 www.siteb.com

先确保能ping 通192.168.1.100
先确保能ping 通www.sitea.com
先确保能ping 通www.siteb.com

然后在浏览器上分别打开

www.sitea.com
www.siteb.com

应该可以打开刚才定义的两个不同内容的网站

#两个网站启用HTTPS协议

vi /etc/httpd/conf.d/ssl.conf

确保以下两个开关打开:

Listen 443 https
NameVirtualHost *:443

#在文件最后加入sitea和siteb的配置

#注意两个SSL证书.crt和.key的存放位置,先申请好两份证书,把这些文件放到相应的文件夹

#sitea配置

<VirtualHost 192.168.1.100:443>
DocumentRoot "/var/www/sitea"
ServerName www.sitea.com:443
ServerAdmin [email protected]
AddDefaultCharset UTF-8
SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/sitea.crt"
SSLCertificateKeyFile "/etc/pki/tls/private/sitea.key"
ErrorLog "logs/www.sitea.com443_error.log"  
CustomLog "logs/www.sitea.com443_access.log" combined
    <Directory "/var/www/sitea">
    AllowOverride None
    Order allow,deny
    Allow from all
   #Options Indexes FollowSymLinks #如果搭建文件服务器,要删除前面的符号#
    Require all granted
    </Directory>
    <IfModule dir_module>
    DirectoryIndex index.html
    </IfModule>
    <Files ".ht*">
    Require all denied
    </Files>
</VirtualHost>

#注意,sitea和sateb的数字证书是不一样的!请申请两张不同的ssl证书

<VirtualHost 192.168.1.100:443>
DocumentRoot "/var/www/siteb"
ServerName www.siteb.com:443
ServerAdmin [email protected]
AddDefaultCharset UTF-8
SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/siteb.crt"
SSLCertificateKeyFile "/etc/pki/tls/private/siteb.key"
ErrorLog "logs/www.siteb.com443_error.log"  
CustomLog "logs/www.siteb.com443_access.log" combined
    <Directory "/var/www/siteb">
    AllowOverride None
    Order allow,deny
    Allow from all
   #Options Indexes FollowSymLinks #如果搭建文件服务器,要删除前面的符号#
    Require all granted
    </Directory>
    <IfModule dir_module>
    DirectoryIndex index.html
    </IfModule>
    <Files ".ht*">
    Require all denied
    </Files>
</VirtualHost>

#重启HTTP服务
systemctl restart httpd

#用浏览器试试打开

http://www.sitea.com
https://www.sitea.com
http://www.siteb.com
https://www.siteb.com

#强制跳转到https

vi /etc/httpd/conf.d/sitea.conf

#在</Directory>前面加入Rewrite开头的内容

       RewriteEngine On
    RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    </Directory>
</VirtualHost>

以同样的方式修改siteb配置

vi /etc/httpd/conf.d/siteb.conf

重启HTTP服务

systemctl restart httpd

用浏览器试试打开,应该可以强制跳转到https

http://www.sitea.com
http://www.siteb.com

虚拟站点三种方式配置方式:

#基于IP,即一个网站一个单独IP

#示例

#######Sitea#######

<VirtualHost 172.16.58.25:80>
        ServerName www.sitea.com
        DocumentRoot "/var/www/sitea"
</VirtualHost>

#######Siteb#######

<VirtualHost 172.16.58.12:80>
        ServerName www.siteb.com
        DocumentRoot "/var/www/siteb"
</VirtualHost>
#基于端口,即同一IP不同端口

#示例

#######Sitea#######

<VirtualHost 172.16.58.25:80>
        ServerName www.sitea.com
        DocumentRoot "/var/www/sitea"
</VirtualHost>

#######Siteb#######

<VirtualHost 172.16.58.25:8080>
        ServerName www.siteb.com
        DocumentRoot "/var/www/siteb"
</VirtualHost>
#基于域名,即同一IP同一端口

#示例

#######Sitea#######

<VirtualHost 172.16.58.25:80>
        ServerName www.sitea.com
        DocumentRoot "/var/www/sitea"
</VirtualHost>

#######Siteb#######

<VirtualHost 172.16.58.25:80>
        ServerName www.siteb.com
        DocumentRoot "/var/www/siteb"
</VirtualHost>

#########部分配置解释###########

#添加只能使用目录名称访问的文件名

#根据你网站首面的文件

#把这行改为DirectoryIndex index.html index.cgi index.php等等

<IfModule dir_module>
    DirectoryIndex index.html

</IfModule>

禁止用户浏览 .htaccess.htpasswd文件

<Files ".ht*">
    Require all denied
</Files>

统一编码,防止乱码

AddDefaultCharset UTF-8

Apache服务Forbidden 403问题解决方法

原因1:apache配置文件中没有对站点目录的权限许可,这通常是在初始安装apache后,更改了默认的apache站点目录时所至(重要,常发生):

如将站点目录更改为:/var/blog,则在apache配置文件中如果不加下面的配置 就会返回403错误。

<Directory "/var/blog">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
原因2:站点目录下无首页文件(index文件),而apache的配置又禁止了目录浏览,就会提示403错误,配置如下(偶尔发生):
<Directory "/var/blog">
    Options Indexes FollowSymLinks #需要加这行允许浏览目录
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
原因3:还是Directory权限问题(不常发生)

如下文:拒绝10.0.0.0/24整段访问。这样被拒绝的主机访问就会出现403错误

<Directory "/var/blog">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    #Allow from all
    Deny from 10.0.0.0/24
原因4:站点目录权限问题(不常发生)。

站点目录需要apache的用户有访问权限,否则就会报403错误。

[root@http-server var]# pwd
/var
[root@http-server var]# chown -R root.root blog/
[root@http-server var]# chmod 700 blog
[root@http-server var]# ll -d blog/
drwx------ 3 root root 4096 Jun  4 22:11 blog/
原因5:不符合SElinux策略

有道云笔记 https://note.youdao.com/ynoteshare1/index.html?id=d6b0f58cf6cd259ead0e404bd1523bb8&type=note#/

第5条随机版权

扫描二维码推送至手机访问。

版权声明:本文由TranBon博客发布,如需转载请注明出处。

本文链接:https://bk.tranbon.com/?id=280

相关文章

在Centos 7 上安装Zabbix监控

在Centos 7 上安装Zabbix监控

一、关闭selinux和iptables && 安装Zabbix rpm包仓库 && 安装zabbix-server-mysql和zabbix-web-mysql &a...

vi编辑器教程

http://blog.sina.com.cn/s/blog_736f1c59010136ry.htmlhttp://blog.csdn.net/lanxinju/article/details/57...

SSR 一键部署脚本

一个逗比写的逗比脚本ssr.sh脚本说明: ShadowsocksR 一键安装/管理脚本,支持单端口/多端口切换和管理系统支持: CentOS6+ / Debian6+ / Ubuntu14+使用方法...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。