【我的Linux,我做主!】使用Apache服务部署Web论坛网站
目录:
(一)了解Apache的基本配置
(二)配置动态页面:CGI、WSGI、SSI
(三)搭建一个社区动力论坛
(四)配置虚拟主机
(五)配置HTTPS
我们提供的服务有:成都网站建设、网站制作、微信公众号开发、网站优化、网站认证、瓜州ssl等。为超过千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的瓜州网站制作公司
Apache是世界使用排名第一的Web服务器软件,它是Apache软件基金会的一个开放源码的网页服务器。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
本来它只是用于小型或实验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此在一个Apache Web站点扩容时,通常是增加服务器或扩充集群节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的网站如Amazon、Yahoo!、W3Consortium、Financial Times等都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台之上)以及它的可移植性等方面。
(一)了解Apache的基本配置
平常我们通过浏览器浏览网页的时候,其实访问的就是一个Web服务器,搭建了Web服务器后,客户端通过浏览器访问时之间使用的是http协议(HyperText Transfer Protocol)即超文本传输协议,它所使用的端口是80。
(1.1)我们在vms001主机上搭建一个Web服务器,首先使用yum在vms001主机上安装相关的软件包。
(1.2)接着将服务重启一下,并设置开机自动启动,由于防火墙服务是开启的,所以还需要设置防火墙允许通过http和https请求。最后进入/etc/httpd/conf/目录下,编辑httpd.conf文件。
(1.3)包含的文件为conf.modules.d/目录下的所有后缀为conf的配置文件,这个目录的指向并不清晰,其实默认情况下指的就是/etc/httpd/conf.modules.d/目录。
(1.4)在httpd.conf文件中的Listen端口参数是可以根据需要进行添加的,但是要记得修改端口的上下文。可以参考/etc/ssh/目录中的sshd_config配置文件(图1-4至图1-7)
(1.5)User和Group设置的都是apache,表示httpd进程设置的属主和属组为apache,其中ServerAdmin表示设置的是管理员的邮箱地址,在系统出问题时,会发送邮件报告给管理员。
(1.6)当我们的服务器上有多个站点时,例如www.a.com 和www.b.com ,这个时候就需要设置对应的ServerName,因为两个站点都是使用同一个IP地址,所以只有设置好了对应的ServerName条目,服务器才可以正常的外部客户端的访问做区分。
(1.7)DocumentRoot主要指明的是网页文件默认存放的文件路径,一般我们的主页都是放在/var/www/html/目录下。一般在/var/www/html/目录下是没有文件存在的,所以当输入Web服务的IP地址时,默认看到的是Apache的测试页。
(1.8)如果在/var/www/目录中创建了子目录,但是没有为子目录单独设置权限,则子目录会继承上层目录/var/www/目录中的权限。
(1.9)我们在/var/www/html/目录下创建一个xx目录,并创建5个html文件,在/etc/httpd/conf/目录下的httpd.conf文件中给xx目录也创建一个单独的权限属性设置。注意Options选项有Indexes,表示如果没有index.html主页则会将xx目录下的所有文件以索引的方式显示出来,接着将服务重启一次# systemctl restart httpd.service,当然Indexes选项只对/var/www/html/目录往下目录有效,对/var/www/html/目录本身无效,因为如果/var/www/html/目录下没有index.html主页则会显示测试页的信息。
(1.10)在Options目录下的FollowSymLinks选项表示允许显示/var/www/html/xx/目录下软链接到其他目录位置的文件,此时我们创建一个www软链接到/www目录,那么在浏览器输入http://192.168.26.101/xx/www/ 时,就会链接到/www目录中的index.html文件。
(1.11)AllowOverride参数表示是否允许此目录里的.htaccess这个文件生效,在此处为了进行验证效果我们将默认的none设置为authconfig。在/var/www/html/xx/目录中创建的一个配置文件.htaccess文件中进行编辑,并创建对应的密码文件.htpasswd,将服务重启后,发现登录/xx/目录便需要进行密码认证了。
(1.12)在httpd.conf配置文件中Directory目录下的Require参数一般有如下的
Require all denied:拒绝所有客户端访问
Require all granted:允许所有客户端访问
Require ip 192.168.26.100 192.168.26.130:允许某一个网段IP地址访问
Require local:只允许本机访问
(1.13)在httpd.conf配置文件中IfModule目录下的DirectoryIndex参数设置的是默认主页,一般值为index.html,如果没有默认主页则会显示目录中的所有索引信息。而在Files目录下的Require参数则是设置.ht后缀的隐藏文件的权限,例如.htaccess默认权限是拒绝。
(1.14)ErrorLog错误日志默认是存放在ServerRoot下的logs/error_log当中,我们知道ServerRoot的默认值是/etc/httpd目录。其中/etc/httpd/logs/目录中的内容和/var/log/httpd/目录中的信息一致。
(1.15)Alias参数主要作用是设置别名,可以任意的设置一个访问的名称,例如/hello,同时别名前后两个要一致,如果有"/",则两个都要加"/";如果没有"/",则两个都不要加。此处都没有加(图1-33)。设置完Alias信息后还要对创建的目录设置Directory信息,此处直接填写创建的目录信息/zz即可,会自动应用到下面的所有子目录。这种应用很常见,例如我们安装Zabbix监控的时候,访问系统就是使用这种方式。
(二)配置动态页面:CGI、WSGI、SSI
(2.1)公共网关接口(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范。首先我们创建一个CGI页面,进入到/var/www/cgi-bin/目录下创建一个aa.pl的perl脚本文件
(2.2)除了写Perl脚本实现功能,我们也可以使用shell脚本实现,我们在/var/www/cgi-bin目录下创建一个aa.sh的脚本文件,也是可以正常的在页面显示的。
(2.3)WSGI是Web Server Gateway Interface的缩写。以层的角度来看,WSGI所在层的位置低于CGI。是用python实现动态页面的一种功能,比如openstack dashboard。使用WSGI功能是需要先安装相关的软件包的。
(2.4)服务器端包含 SSI,是英文 Server Side Includes的简写。SSI是一种可以指挥服务器动态声称网页内容的HTML指令。我们在/var/www/html/xx/目录下创建一个index.html的主页(图1-50),在httpd.conf的配置文件中添加Includes选项,并将主页后缀有index.html修改为index.shtml,便可以实现SSI的页面访问了。
(2.5)我们也可以将SSI打印时间的部分更换为脚本文件进行显示。
(2.6)如果我们希望访问http://192.168.26.101/xx/ 的时候能自动跳转到http://192.168.26.101/xx/index.shtml 下面,则可以使用地址的重写方式在httpd.conf 配置文件中配置解决。
(三)搭建一个社区动力论坛
(3.1)我们创建一个社区动力的论坛,首先在根目录下创建一个/bbs目录,并在/xx目录下创建一个Discuz目录,并将论坛程序包Discuz!X3.2拷贝到Discuz目录中。
(3.2)接着在/etc/httpd/conf目录下的httpd.conf配置文件中添加别名和目录设置的配置信息。
(3.3)由于系统中是启用了SELinux的,所以需要修改一下所设置目录的上下文信息,并将httpd服务重启一下。
(3.4)接着我们进入数据库中设置root的登录数据库的密码为redhat
(3.5)在Mariadb数据库中创建一个数据库名为blog,创建一个用户bob,登录blog数据库的密码是redhat,而且对数据库有所有的操作权限。
(3.6)此时在浏览器输入http://192.168.26.101/bbs ,便可以正常的进入到了Discuz社区动力的安装界面。
(3.7)我们安装时先临时设置/bbs目录的权限为777,并停止一下SELinux。
(3.8)在安装数据库界面设置好对应的数据库名称和对应的用户密码信息,这样我们的论坛网站便搭建了起来。
(3.9)我们输入在安装向导设置的用户名和密码信息,便可以进入管理员的登录界面了,并进行相关的版块设置。
(3.10)此时我们的社区动力论坛便可以正常的提供服务了。
(四)配置虚拟主机
(4.1)在/etc/httpd/conf/目录下的httpd.conf配置文件中的IncludeOptional参数表示将/etc/httpd/conf.d/目录下的所有配置文件全部都会加载进来。
(4.2)虚拟主机指的是在同一台服务器上搭建多个站点,例如在server端上有两个主机名www.a.com和www.b.com ,它们解析出的地址都是网卡eth0端口的1.1.1.1的IP地址。接着我们从客户端PC发出向www.a.com 的主机地址的请求,虽然访问的IP地址都是1.1.1.1,但在PC端发出的报文中数据包包头会标记自己需要访问的是www.a.com 的信息。此时在服务器端会通过httpd.conf配置文件中的ServerName字段的设置进行标记,通过定义不同的主机名来实现区分不同的站点。配置虚拟主机常见的有三种配置方式:1、基于主机名的虚拟主机(4.3至4.9);2、基于IP地址的虚拟主机(4.10至4.12);3、基于端口的虚拟主机。
(4.3)接着我们在/etc/unbound/local.d/目录中创建一个baidu.conf的配置文件。
(4.4)我们使用vms002主机进行测试,将vms002主机的DNS服务器设置为192.168.26.101,发现此时访问不同的域名中的主机解析的IP地址是一致的。
(4.5)我们将/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf的模板文件拷贝到conf.d/目录下并命名为vhost.conf文件名。
(4.6)在/etc/httpd/conf.d/目录中的vhost.conf配置文件中填写如下的配置信息。
(4.7)在vhost.conf配置文件中,我们需要添加对虚拟主机/baidu目录的设置,这样就可以正常的访问vms001.baidu.com虚拟主机地址了。
(4.8)由于配置了虚拟主机,所以如果在/etc/httpd/conf.d/目录下的vhost.conf配置文件中填写了虚拟主机的地址,那么就一定要将原始vms001.example.com主机的配置信息也写入vhost.conf配置文件中。
(4.9)此时我们通过vms002主机访问vms001.example.com主机和vms001.baidu.com主机都能够访问到对应域名的主页信息了。这个就是我们基于主机名的虚拟主机的配置。
(4.10)然后我们配置基于IP地址的虚拟主机配置。
# ip addr show dev eno16777728
# ip addr add 192.168.26.110/24 dev eno16777728
# ip addr show dev eno16777728
(4.10)接着我们在/etc/unbound/local.d/目录下的baidu.conf配置文件中修改主机对应的IP地址信息。
(4.11)我们进入到/etc/httpd/conf.d/目录中,在vhost.conf配置文件中,将不同的虚拟主机的IP地址填写到对应的VirtualHost参数位置。
(4.12)此时在vms002主机上访问vms001.baidu.com虚拟主机的地址是可以正常的访问的,而且访问vms001.example.com虚拟主机的地址也是可以正常的访问的。
(五)配置HTTPS
通常我们访问一个站点的时候,比如浏览网页浏览搜狐新闻的时候使用的是HTTP协议,所有的内容都是以明文的方式传输的,由于客户浏览的新闻都是公开的,所以传输数据并没有很强的安全性传输的需求。但有时候例如我们在访问支付宝时,由于会涉及到用户名密码以及帐户资金操作等情况,此时我们是不希望这些信息在互联网中以明文的方式传输,否则会对我们的信息造成一定的安全隐患。所以此时我们应该使用HTTPS协议,即超文本传输安全协议(Hypertext Transfer Protocol Secure)来进行通信,https是使用SSL对传输层进行加密,即https=http+tls/ssl。
一般来说加密有三种类型,即对称加密、非对称加密和哈希函数。对于对称加密来说,使用的密钥是相同的,加密是使用什么密钥,解密也就需要使用一致的密钥。客户端A(PC端)使用密钥123对数据进行加密后将数据传递给客户端B(支付宝钱包),客户端B接收到数据后也要使用密钥123才可以对数据进行解密,但是客户端B应该怎样获取到客户端A使用的密钥123呢?通过互联网邮件明文传输可能会被Hacker窃取,通过电话告知也可能会被窃听,对称加密算法的难点在于不知道怎样将密钥安全的传输。对称加密算法的优点:速度快且安全;对称加密算法的缺点:无法保证安全的传输密钥。常见的AES,DES算法都是属于对称加密算法。
非对称加密主要是包含公钥和私钥密钥对,其中公钥是可以公开明文传输的,私钥是非公开的需要用户独立保存的。非对称加密通常是有两类作用,包括数据加密和数字签名。其中数据加密是使用公钥加密,私钥解密。例如客户端A(PC端)向客户端B(支付宝钱包)传输数据,客户端B有一个公钥和一个私钥,此时客户端A获取客户端B的公钥B公将数据进行加密,加密完成后在网络中明文传输是没有关系的,此时客户端B获取到加密的数据后,使用自己的私钥B私进行解密。
所以常见的做法是将对称加密和非对称加密结合起来使用,客户端A向客户端B传输数据,客户端A使用密钥123对数据加密后将数据以明文的方式在互联网传输给客户端B,接着客户端A获取到客户端B的公钥B公,将密钥123使用B公加密也传输给客户端B,此时客户端B使用B私对密钥123进行解密,在使用解密后的密钥123解密客户端A传输过来的加密信息,从而完成了互联网安全传输。
有时候在网络传输的过程中,客户端A(PC端)向客户端B(支付宝钱包)传输信息,当客户端B将自己的公钥B公发送给客户端A的时候,可能遇到客户端C(Hacker)将客户端B的公钥截取了,客户端C将自己的公钥C公伪装成B公并发送给客户端A,客户端A便开始用C公加密数据并发送给客户端C,客户端C再使用C私解密数据,获得了机密文件,接着客户端C再使用客户端B的公钥B公将获取到的文件加密传输给客户端B。这个时候客户端A与客户端B感觉是直接通信的,却并不知道中间还有客户端C的Hacker存在。
因为我们无法保证客户端A在接收到客户端B的公钥B公一定是客户端B的,所以此时可以用数字签名解决这个问题,数字签名是使用私钥加密、公钥解密,例如客户端A首先使用哈希函数对传输的文件产生一个哈希码,接着客户端A使用私钥A私对生成的哈希码加密,然后客户端A将原始数据和A私生成的哈希码报文一起传递给客户端B,客户端B接收到信息后,会使用A的公钥A公进行解密,得到一个哈希码,接着客户端B使用哈希函数对原始传输的文件生成一个新的哈希码,并和A公解密得到的哈希码进行比较,如果两个哈希码相同,表示数据在传输过程中没有被修改过。
由于A客户端可以生成任意多个密钥对,所以此时遇到的问题是我们没有办法证明A私和客户端A之间的必然联系,所以在互联网中存在着一个机构CA即证书授权中心(certificate authority,CA),它作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有整数中列出的公开密钥。CA机构的数字签名使得Hacker不能伪造和篡改证书。它负责生产,分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。证书授权中心(CA)是管理和签发安全凭证和信息安全密钥的网络机构。注册中心(RA)对申请者所提供的数字证书进行验证,CA验证后签发证书。内容包括申请者的个人信息,公共密钥和认证有效期,作为网上身份证明的依据。例如在网络交易中,支付宝会自己生成一对密钥包括公钥和私钥,支付宝会用私钥生成一个csr证书请求文件,并发送给CA验证,CA通过审核后会颁发一个证书给支付宝,此时这个证书就是公钥,是CA做过了数字签名认证后的支付宝的公钥。此时客户端准备和支付宝进行通信,它们之间协商是使用对称加密算法来进行通信的,接着客户端PC使用自己生成的对称加密算法的密钥123加密数据并发送给支付宝,但是此时支付宝并不知道加密的密钥123具体是什么,所以也无法解密数据。此时支付宝会将从CA颁发的证书发送给客户端PC,客户端PC得到的证书文件本质就是支付宝的公钥,客户端PC得到的支付宝公钥上有CA机构的数字签名,而在浏览器中一般都内置了常见CA的公钥文件,我们知道数字签名是私钥加密、公钥解密,此时客户端的浏览器使用使用内置的CA公钥认证证书,如果认证通过说明这个确实是来自支付宝的公钥文件。而数据的非对称加密是使用公钥加密,私钥解密,此时浏览器将密钥123使用支付宝的公钥加密后传输给支付宝,支付宝获得后使用自己的私钥解密数据得到了密钥123,最后使用密钥123解密对称加密的文件从而获得客户端PC传递过来的数据信息。
(5.1)进入到/etc/httpd/conf目录下,首先创建一个支付宝端的私钥证书client.key,接着创建一个自签名的支付宝的公钥证书client.pem,最后再创建一个CA的私钥client.ca
(5.2)进入到/etc/httpd/conf.d/目录中,编辑ssl.conf配置文件。配置完成后将Web服务重启一下。
(5.3)在vms002主机上测试https://www.baidu.com/ 的访问情况。
(5.4)记住需要在/etc/httpd/conf.d/目录下的vhost.conf和ssl.conf文件中都开启SSL的验证,并配置好密钥信息,这样就可以使用https访问不同的虚拟主机了。
(5.5)接下来使用基于IP地址的虚拟主机实验一次,https://vms001.baidu.com 可以正常的访问,https://vms001.example.com 不能正常访问
—————— 本文至此结束,感谢阅读 ——————
网站标题:【我的Linux,我做主!】使用Apache服务部署Web论坛网站
文章链接:http://hbruida.cn/article/gepejp.html