首先了解一下网络服务
我们平时访问的网站服务就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务。Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或 HTTPS(安全超文本传输协议)把请求的内容传送给用户
- 目前能够提供 Web 网络服务的程序有 IIS、Nginx 和 Apache 等
- IIS(Internet Information Services)互联网信息服务是由微软公司提供的基于运行Microsoft Windows的互联网基本服务
- Nginx(engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
- Apache 是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中
接下来就讲述 Linux 下Apache 服务程序的部署(在 SELinux permissive 或 disabled 的情况下进行操作)
[root@apache-server ~]# yum install httpd.x86_64 -y
Loaded plugins: langpacks
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-17.el7 will be installed
.........(我是用来省略的).........
Installed:
httpd.x86_64 0:2.4.6-17.el7
Complete!
安装服务完成,启动服务,关闭防火墙
[root@apache-server ~]# systemctl start httpd #启动服务
[root@apache-server ~]# systemctl stop firewalld.service #关闭防火墙
查看 httpd 服务的 80 端口是否开启:
[root@apache-server ~]# netstat #查看网络连接、路由表、接口统计信息、化装连接和多播成员
-a:显示监听和非监听(对于TCP这意味着已建立的连接)套接字
-l:仅显示监听套接字
-n:不进行DNS轮询,显示IP(可以加速操作)
-p : 显示进程标识符和程序名称
-t:指明显示TCP端口
-u:指明显示UDP端口
[root@apache-server ~]# netstat -antlup | grep http
#查看 http 服务端口
可以通过修改 httpd 的配置文件来进行对端口的修改
[root@apache-server ~]# vim /etc/httpd/conf/httpd.conf
编辑第 42 行修改端口号(注只能修改为空闲端口,修改完后重启服务)
.........(我是用来省略的).........
41 #Listen 12.34.56.78:80
42 Listen 80
服务安装完成,开启服务,关闭防火墙,可以在浏览器中输入主机 ip 进行查看 /var/www/html/ 的信息
执行如下:
安装完成后查看服务端口
配置文件(/etc/httpd/conf/httpd.conf)的第 42 行管理其默认端口
在浏览器中查看
第一句话说明:该页面用于测试 Apache HTTP 服务器安装后的正确操作。如果您能够阅读这个页面,这意味着在这个站点上安装的 Apache HTTP 服务器工作正常。
httpd 服务基本配置完成,其基本服务文件参数如下:
服务目录 /etc/httpd
主配置文件 /etc/httpd/conf/httpd.conf
默认发布目录 /var/www/html
访问日志 /var/log/httpd/access_log
错误日志 /var/log/httpd/error_log
默认发布文件 /var/www/html/index.html
可以通过编辑配置文件修改其默认发布目录与默认发布文件
apache 的默认发布文件可通过主配置文件进行修改
主配置文件 /etc/httpd/conf/httpd.conf 第 163 行左右
[root@apache-server ~]# vim /etc/httpd/conf/httpd.conf
.........(我是用来省略的).........
160 # DirectoryIndex: sets the file that Apache will serve if a directory
161 # is requested.
# 目录索引:设置当请求目录时,Apache将服务的文件。
162 #
163
164 DirectoryIndex index.html #默认发布文件为 index.html
165
在 /var/www/html/ 编辑 index.html 文件,在浏览器中查看效果
执行如下:
主配置文件 /etc/httpd/conf/httpd.conf 关于默认发布文件的内容:
在 /var/www/html/ 编辑 index.html 文件,在浏览器中查看效果
编辑内容如下:
浏览器中查看效果:
修改默认发布文件
编辑配置文件 vim /etc/httpd/conf/httpd.conf
[root@apache-server ~]# vim /etc/httpd/conf/httpd.conf
内容如下:
163
164 # DirectoryIndex index.html
165 DirectoryIndex test.html #将默认发布文件修改为 test.html
166
167
重启服务后在浏览器中测试
执行如下:
修改配置文件设置默认访问文件为 test.html
在 /var/www/html/ 编辑 test.html
在浏览器中查看效果
原来的发布文件 /var/www/html/index.html 可以通过在浏览器中输入 “apache 服务器 IP/index.html”来查看
修改默认发问目录:
建立新的目录,作为新的默认发布目录,并在默认发布目录下建立子目录
建立 /test/html 作为默认发布目录
建立 /test/html.lin 作为子目录
编辑主配置文件:
[root@apache-server ~]# vim /etc/httpd/conf/httpd.conf
第120行左右
120 DocumentRoot "/test/html" #修改apache的默认访问目录
121
122 "/test">
123 # Allow open access:
124 Require all granted #允许任何人通过apache访问/test
125 DirectoryIndex test.html #/test/下的所有目录的默认访问文件为
#test.html
126
127
128 "/test/html/lin"> #对于 /test/html/lin 来说
129 DirectoryIndex index.html #该目录下的默认访问文件为index.html
130
~
编辑完成重启服务,在浏览器中查看结果,若是无法显示无法访问,注意 SELlinx 是否关闭
执行如下:
创建目录,编辑配置文件并重启服务
编辑默认发布文件内容:
/test/html 默认发布文件 test.html 内容
/test/html/lin 默认发布文件 index.html 内容
配置文件内容如下:
在浏览器中查看
/test/html
/test/html/lin
由上可知,子目录的默认发布文件可以进行自行规定,若是不指定则是全局规定的默认发布文件
对 Apache 服务的访问可以过 IP 或者用户建立进行限制
注:
还原上述默认发布文件及目录的修改
建立 /var/www/html/test 用来作为限制目录
编辑主配置文件:
[root@apache-server ~]# vim /etc/httpd/conf/httpd.conf
编辑内容如下:(在第 130 行左右进行添加)
130 "/var/www/html/test"> #区域配置
131 Order Allow,Deny #读取顺序:先读Allow后读Deny
#(注意先后顺序)
132 Allow from all #允许所有人访问
133 Deny from 172.25.151.50 #禁止此 IP 访问
134
编辑完成重启服务,在浏览器中查看效果
执行如下:
建立目录与文件
发布文件内容
禁止 IP 172.25.151.50 访问
在浏览器中查看
IP 为 172.25.151.250 的用户可以查看
IP 为 172.25.151.50 的用户,可以访问 /var/www/html 但不可访问被限制的目录 /var/www/html/test
建立创建访问用户
在 /etc/httpd/ 下进行操作
[root@apache-server httpd]# htpasswd #管理用户文件从而进行基本身份验证。
-c #创建passwdfile。如果passwdfile已经存在,它将被重写并截断。这个选项不能
#与-n选项相结合。
-m #使用MD5加密的密码
[root@apache-server httpd]# htpasswd -cm apacheuser lin #创建用户lin
[root@apache-server httpd]# htpasswd -m apacheuser juan #创建用户juan
建立成功后会在 /etc/httpd/ 下生成 apacheuser 文件
编辑主配置文件进行访问限制
127 "/var/www/html/test">
128 AuthUserFile /etc/httpd/apacheuser
#访问用户的文件
129 AuthName "Please input user and password!!!"
#显示提示信息
130 AuthType basic
#认证类型为basic
131 Require user lin
#允许用户 lin 登陆访问
132 #Require valid-user
#允许所有可用用户进行访问
133
编辑完成重启服务,在浏览器中查看效果
执行如下:
创建用户
编辑配置文件,只允许用户 lin 进行访问,若想允许所有用户访问可将第 134行修改为 Require valid-user
允许所有可用用户进行访问
在浏览器中查看效果:
输入不被允许的用户 juan 的用户名密码,或是不输入,则会显示如下
错误信息提示:
此服务器无法验证您是否被授权访问所请求的文档。要么您提供了错误的凭据(例如,错误的密码),要么您的浏览器不理解如何提供所需的凭据。
输入允许访问的用户 lin 的用户名密码,访问成功
我们同过固定 IP 来进行Apache 服务访问站点的建立,一个 IP 只能作为一个访问页面,是对网络资源的浪费,因此可以使用一个 IP 发布多个节点的测试页来解决此问题
编辑浏览器所在的本地解析文件 /etc/hosts
[root@foundation151 ~]# vim /etc/hosts vim /etc/hosts
编辑内容如下:
172.25.151.150 www.server.com nba.server.com music.server.com
为 IP 添加多个域名作为节点,让本地浏览器可以识别以上域名
在 /etc/httpd/conf.d/ apache的子配置目录中添加编辑 default.conf文件
vim default.conf 编辑默认配置文件
内容如下:
1 80> #虚拟访问的默认端口为80
2 DocumentRoot /var/www/html #默认目录为/var/www/html
3 CustomLog "logs/default.log" combined #用户日志
4
===========================================================================================
为各个节点建立对应的目录
[root@apache-server html]# mkdir /var/www/html/virtual/server.com/nba/ -p
[root@apache-server html]# mkdir /var/www/html/virtual/server.com/music/ -p
编辑节点的默认访问文件
[root@apache-server html]# vim /var/www/html/virtual/server.com/nba/index.html
[root@apache-server html]# vim /var/www/html/virtual/server.com/music/index.html
===========================================================================================
编辑各节的配置文件:
music.server.com 的配置文件
[root@apache-server ~]# vim /etc/httpd/conf.d/music.conf
1 80> #访端口为 80
2 ServerName music.server.com #域名为 music.server.com
3 DocumentRoot "/var/www/html/virtual/server.com/music/"
#访问目录为:"/var/www/html/virtual/server.com/music/"
4 CustomLog "logs/musics.log" combined
#用户日志文件为:/etc/httpd/logs/musics.log
5
6 "/var/www/html/virtual/server.com/music/">
7 Require all granted #此目录允许任何人访问
8 .server.com 的配置文件
vim /etc/httpd/conf.d/nba.conf
内容如下:
1 80> #访端口为 80
2 ServerName nba.server.com #域名为 nba.server.com
3 DocumentRoot "/var/www/html/virtual/server.com/nba/"
#访问目录为:"/var/www/html/virtual/server.com/nba/"
4 CustomLog "logs/nba.log" combined
#用户日志文件为:/etc/httpd/logs/nba.log
5
6 "/var/www/html/virtual/server.com/nba/">
7 Require all granted #此目录允许任何人访问
8
然后重启服务
执行如下:
目录、文件创建完成后,进行编辑
编辑music.server.com nba.server.com 的发布文件
nba.server.com 的发布文件
music.server.com 的发布文件
编辑配置文件
/etc/httpd/conf.d/default.conf
/etc/httpd/conf.d/music.conf
/etc/httpd/conf.d/nba.conf
在浏览器中进行查看
输入 www.server.com 访问 /var/www/html/
输入 nba.server.com 访问 /var/www/html/virtual/server.com/nba/
输入 music.server.com 访问 /var/www/html/virtual/server.com/music/
- HTTP 缺省工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务,HTTP 所封装的信息是明文的,通过抓包工具可以分析其信息内容,如果这些信息包含有你的银行卡帐号、密码,你肯定无法接受这种服务,HTTPS 就是可以加密这些敏感信息的服务
- HTTPS 缺省工作在 TCP 协议 443 端口,它的工作流程一般如以下方式:
(1)完成TCP三次同步握手
(2)客户端验证服务器数字证书,通过,进入步骤3
(3)DH算法协商对称加密算法的密钥、hash算法的密钥
(4)SSL安全加密隧道协商完成
(5)网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改
如果HTTPS是网银服务,以上SSL安全隧道成功建立才会要求用户输入账户信息,账户信息是在安全隧道里传输,所以不会泄
具体操作如下:
使用 genkey 实用程序(通过 crypto-untils 软件包分发),生成自签名证书及其关联的私钥。为
了简化起见,genkey 将在“正确”的位置(/etc/pki/tls目录)创建证书及其相关的密钥,必须以
root 用户运行核实程序
安装 mod_ssl
[root@apache-server ~]# yum install mod_ssl.x86_64 -y
安装 crypto-utils
[root@apache-server ~]# yum install crypto-utils.x86_64 -y
ls /etc/httpd/conf.d/
可看到生成了 ssl.conf 文件
[root@apache-server ~]# genkey www.server.com #生成该网页的证书与密钥
生成证书文件: /etc/pki/tls/certs/www.server.com.crt
生成密钥文件: /etc/pki/tls/private/www.server.com.key
编辑 /etc/httpd/conf.d/ssl.conf 将生成的证书与密钥信息添加进去
[root@apache-server ~]# vim /etc/httpd/conf.d/ssl.conf
编辑第 100 行和第 107 行
100 SSLCertificateFile /etc/pki/tls/certs/www.server.com.crt #证书文件
107 SSLCertificateKeyFile /etc/pki/tls/private/www.server.com.key #密钥文件
重启 httpd 服务
在浏览器中输入 https://www.server.com 进行查看
具体执行如下:
安装完成后执行 keygen
显示如下:
1. 您现在正在生成一个新的密钥对,它将用于加密所有SSL通信到名为www.server.com的服务器。您还可以创建一个证书请求并将其发送到证书颁发机构(CA)进行签名。
会生成 /etc/pki/tls/private/www.server.com.key 密钥文件
/etc/pki/tls/certs/www.server.com.crt 证书文件
2. 这里用来选择密钥的大小,密钥大小不得小于1024 bit
512(不安全);
1024(低级的,速度快);
2048(中等安全,中等速度,推荐);
4096(高安全性,速度慢);
3. 生成随机比特
4. 为了从内核随机数生成器生成2048个随机位,在这个主机的控制台可能需要一些键盘或鼠标输入。如果在本地运行这个程序,请尝试输入一些随机文本或移动鼠标。
执行到此按上述要求操作
5. 您是否愿意向证书颁发机构(CA)发送证书请求(CSR) ?这里点 no 这里是需要缴费申请的,我们仅用来学习不与要通过官方认证
6. 在这个阶段,您可以在您的私钥上设置密码。如果您设置了密码,您将不得不在每次服务器启动时输入它。用于加密密钥的密码必须与相同服务器安装使用的所有密钥相同。如果您不加密密钥,那么如果有人闯入您的服务器并获取包含密钥的文件,他们将能够解密使用该密钥协商的所有通信。如果您的密钥是加密的,那么将会有更多的工作用于检索私钥。
7. 您将被要求输入信息,这些信息将被制成您的服务器的自签名证书。您将要输入的是所谓的专有名称或DN。有相当多的领域,但你可以留下一些空白。
证书密钥生成完毕,编辑 /etc/httpd/conf.d/ssl.conf 将密钥添加进去
重启服务,在浏览器中输入 https://www.server.com
由于没有证书,连接不安全
为其添加证书
添加后查看域名信息
可以访问 https://www.server.com
apache 地址重写
建立目录
[root@apache-server ~]# mkdir /var/www/html/virtual/server.com/login/
编辑 login.server.com 的配置文件
vim /etc/httpd/conf.d/login.conf
编辑如下
1 #虚拟端口为 443
2 ServerName login.server.com #域名
3 DocumentRoot "/var/www/virtual/server.com/login/" #访问目录
4 CustomLog "logs/login.log" combined #用户日志
5 SSLEngine on #SSL 开启
6 SSLCertificateFile /etc/pki/tls/certs/www.server.com.crt
#证书文件
7 SSLCertificateKeyFile /etc/pki/tls/private/www.server.com.key
#密钥文件
------------------------------------------------------------------------------------
上述部分为与单 IP 多节点测试页面部署相同,及为此 IP 的另一虚拟主及域名进行配置,并添加证书认证
------------------------------------------------------------------------------------
8
9
10 Require all granted
11
12
13 ServerName login.server.com #域名
14 RewriteEngine on #重写开启
15 RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
#重写规则
16
-------------------------------------------------------------------------------------
上述表示允许访问 login.server.com 并规定输入 https:// 后自动重写为 https://
-------------------------------------------------------------------------------------
其中^(/.*)$ 客户主机在浏览器写入的字符。%{HTTP_HOST}$1 客户主机在浏览器里面写入的内容去掉http:以外的内容。[redirect=301] 表示临时转换,只有在访问的时侯转换。
编辑完毕,重启服务
具体执行如下:
编辑配置文件
在浏览器中执行 http://login.server.com 自动改写成: https://login.server.com
在进行证书添加后就可以访问 login.server.com
Apache 默认支持的语言是 html 对于 cgi 是支持,但是需要进行配置。对于php 不支持需要进行插件安装
html :超文本标记语言,标准通用标记语言下的一个应用(apache 默认支持的语言)
php:超文本预处理器,是一种通用开源脚本语言(apache 默认不支持,需要进行安装)
CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。几乎所有服务器都支持CGI,可用任何语言编写CGI。
php 安装PHP
[root@apache-server ~]# yum install php -y
安装成功,编辑主配置发文件,修改默认发布文件为 index.php
[root@apache-server ~]# vim /etc/httpd/conf/httpd.conf
179
180 DirectoryIndex index.php #设置默认发布文件为 index.php
181
编辑发布文件内容:
[root@apache-server ~]# vim /var/www/html/index.php
编辑如下:
1 2 phpinfo();
3 ?>
~
重启服务,在浏览器中验证
执行如下:
修改默认发布文件
编辑发布文件内容
在浏览器中查看
cgi 类型
建立 cgi 文件的目录
[root@apache-server ~]# vim /var/www/html/index.phpi
编辑 cgi 类型的文件
[root@apache-server ~]# vim /var/www/html/cgi/index.cgi
内容如下:
1 #!/usr/bin/perl
2 print "Content-type: text/html\n\n";
3 print `date`;
~
[root@apache-server ~]# chmod +x /var/www/html/cgi/index.cgi
让cgi文件可执行
编辑配置文件,让cgi 类型文件可以被显示:
[root@apache-server ~]# vim /etc/httpd/conf.d/default.conf
内容如下:
1 _default_:80>
2 DocumentRoot /var/www/html
3 CustomLog "logs/default.log" combined
4
5 "/var/www/html/cgi">
6 Options +ExecCGI #让 cgi 类型可执行
7 AddHandler cgi-script .cgi #添加可识别类型.cgi 类型的可以被识别
8 DirectoryIndex index.cgi #默认发布文件为 index.cgi
9
~
重启服务:
systemctl restart httpd.service
在浏览器中进行验证
执行如下:
编辑配置文件:
编辑发布文件内容:
浏览器中查看:
Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。
若主机 A 可以上网,另一台主机 B 想上网,可以通过 squid 进行代理对主机 B 实现上网。
操作如下:
在可上网的主机 A 中安装squid
[root@foundation151 ~]# yum install squid.x86_64 -y
编辑配置文件(/etc/squid/squid.conf)
[root@foundation151 ~]# vim /etc/squid/squid.conf
55 # And finally deny all other access to this proxy
56 http_access allow all #允许http通过3128端口访问
57
58 # Squid normally listens to port 3128
59 http_port 3128
........(我是用来省略的)........
66 coredump_dir /var/spool/squid #缓存文件存放目录
启动服务
systemctl start squid
在不可以上网的主机 B ,浏览器中进行操作
执行如下:
主机 A 中(可上网)
编辑配置文件:
主机 B 中(不可上网)
在浏览器中编辑:
选择高级设置
选择固定代理配置,输入可上网主机 IP 并输入端口号
检索百度,可以上网
用三个主机进行测试
一个为apache服务器
一个为squid 服务器(不需要 httpd 服务)
一个为客户端
在squid端安装squid服务
[root@squid-server ~]# yum install squid.x86_64 -y
编辑配置文件
[root@squid-server ~]# vim /etc/squid/squid.conf
内容如下
........(我是用来省略的)........
# And finally deny all other access to this proxy
56 http_access allow all #允许任何用户访问此代理点
57
58 # Squid normally listens to port 3128
59 http_port 80 vhost vport #通过80端口进行访问 支持虚拟主机,虚拟端口
60 cache_peer 172.25.151.150 parent 80 0 proxy-only
# 仅作为代理
61
62 # Uncomment and adjust the following to add a disk cache directory.
63 cache_dir ufs /var/spool/squid 100 16 256
64
65 # Leave coredumps in the first cache dir
66 coredump_dir /var/spool/squid #缓存文件存放目录
启动服务
[root@squid-server ~]# systemctl start squid
在apache主机中编辑默认访问文件
[root@apache-server mnt]# vim /var/www/html/index.html
将内容设置为apache主机ip
关闭三个主机的防火墙
在服务端测试
服务端浏览器中检索 squid ip 显示的默认发布文件为apache的内容即验证成功
执行如下:
在 suqid 服务器端编辑配置文件:
启动服务后,在apache 服务端编辑默认发布文件
在客户端浏览器中访问 squid 服务器 IP
访问 apache 服务端 IP
以上两者相同,反向代理成功
通过 apahce 服务 mysql 数据库服务进行简单的论坛搭建
先获取论坛模版:Discuz_X3.2_SC_UTF8.zip
将论坛模版移动到 /var/www/html/ 再对其进行解压
修改 /var/www/html/ 及其子目录权限为 777 让论坛对其可写可执行
配置好数据库
再浏览器中输入本机ip/upload
进行安装
数据库相关配置请移步Linux 下的 MariaDB 数据库管理系统
执行如下:
在浏览器输入 IP/upload/进行论坛安装
运行环境设置
数据库创建
安装成功进行访问
管理员登录
登录成功,对论坛进行管理