当前位置:首页 > 玩机 > 正文内容

使用Apache搭建网页服务

adminis8个月前 (02-22)玩机2220

第一章: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 root@test.com

#改变域名信息
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 []:XX@qq.com

#以下不设置,回车
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 root@sitea.com
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 root@sitea.com
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 root@siteb.com
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#/

第10条随机版权

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

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

本文链接:http://bk.tranbon.com/?id=281

相关文章

哈哈哈!大神Note3 终于可以把 酷派系统 或着 酷派系统 “砖头”直接刷机刷成 360 OS 2.0!

哈哈哈!大神Note3 终于可以把 酷派系统 或着 酷派系统 “砖头”直接刷机刷成 360 OS 2.0!

哈哈哈!大神Note3 终于可以把 酷派系统 直接刷成 360 OS 2.0了哈哈哈!大神Note3 终于可以把 酷派系统 “砖头”直接刷成 360 OS 2.0了最新版的刷机软件就可以了,直接把 酷...

Centos手动安装MySQL数据库、设置MySQL数据库密码、设置MySQL数据库远程

清理环境centos7默认系统自带mariadbmariadb是从mysql来的,是它的一个分支,需要清理掉查看是否已安装rpm -qa |grep -i my...

Linux、Centos一些命令

Centos6-关闭防火墙service iptables stopchkconfig iptables off Centos6-关闭selinux(需重启生效)sed -i.bak '/^...

发表评论

访客

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