背景
Apache : Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中.
Nginx : Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等.
可以使用curl -I (大写i)选项仅查看响应头部信息,我们来看一看国内知名网站部署的服务器类型:
不难发现,现在主流的web服务器都采用nginx的部署方式,毕竟在支持高并发方面有着天生的优势. 主流的网站基本采用:lamp/lnmp方式部署web服务器
Apache与Nginx对比?
Apache
Nginx
稳定、对动态请求处理强
擅长处理静态请求
但同时高并发时性能较弱,耗费资源多
高并发处理能力强、擅长处理反向代理、均衡负载
Apache的相关内容 Apache的安装部署 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 yum install -y httpd httpd-manual systemctl start httpd systemctl enable httpd firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload vim /etc/selinux/config vim /var/www/html/index.html
1 2 3 4 测试:在浏览器输入: http://192.168.64.169/ http://192.168.64.169/manual
Apache的基本信息
目录
位置
主配置目录
/etc/httpd/conf
主配置文件
/etc/httpd/conf/httpd.conf
子配置目录
/etc/httpd/conf.d/
子配置文件
/etc/httpd/conf.d/*.conf
默认发布目录
/var/www/html
默认发布文件
index.html
默认端口
80
默认安全上下文
httpd_sys_content_t
程序开启默认用户
apache (我们在下载httpd这个软件后,会自动生成apache这个用户)
apache日志
/etc/httpd/logs/*
修改Apache默认发布目录 1 2 3 4 5 6 7 8 9 10 11 12 mkdir -p /www/htmlchown -R apache:apache /www/htmlchmod -R 755 /www/htmlecho "Hello Kill3r" >> /www/html/index.htmlvim /etc/httpd/conf/httpd.conf DocumentRoot "/www/html" <Directory "/www/html" > Require all granted </Directory>
修改默认端口(可选) 1 2 3 4 5 6 7 vim /etc/httpd/conf/httpd.conf systemctl restart httpd firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload
修改默认发布文件 1 2 3 4 5 6 7 8 9 10 vim /etc/httpd/conf/httpd.conf <IfModule dir_module> DirectoryIndex index.html index2.html </IfModule>
Apache 配置文件详细解读 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 ServerRoot "/etc/httpd" Listen 8080 Include conf.modules.d/*.conf User apache Group apache ServerAdmin root@localhost <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "/www/html" <Directory "/www/html"> AllowOverride None Require all granted </Directory> <Directory "/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> <IfModule dir_module> DirectoryIndex index.html index2.html </IfModule> <Files ".ht*"> Require all denied </Files> ErrorLog "logs/error_log" LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "logs/access_log" combined </IfModule> <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" </IfModule> <Directory "/var/www/cgi-bin"> AllowOverride None Options None Require all granted </Directory> <IfModule mime_module> TypesConfig /etc/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType text/html .shtml AddOutputFilter INCLUDES .shtml </IfModule> AddDefaultCharset UTF-8 <IfModule mime_magic_module> MIMEMagicFile conf/magic </IfModule> EnableSendfile on IncludeOptional conf.d/*.conf
Apache的访问控制 基于IP的访问控制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 yum remove -y httpd* rm -rf /etc/httpdrm -rf /etc/httpd/conf.d/welcome.confvim /etc/httpd/conf/httpd.conf `以下两个二选一` `Apache的默认配置并不支持使用CIDR表示法或正则表达式进行IP地址的拒绝.如果希望使用更高级的IP拒绝规则,你可能需要考虑使用专门的防火墙软件或其他网络设备来处理这些规则.` <Directory "/www/html/" > Order Allow,Deny Allow from All Deny from 192.168.0.100 </Directory> <Directory "/www/html" > Options Indexes FollowSymLinks Require ip 192.168.64.1 </Directory> systemctl restart httpd
基于用户的访问控制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 cd /etc/httpd/conf/htpasswd -cm killer killer cat killer vim httpd.conf <Directory "/www/html" > AllowOverride None AuthType basic AuthName "Please input your name and password" AuthUserFile /etc/httpd/conf/killer Require valid-user Options Indexes FollowSymLinks </Directory> systemctl restart httpd.service
Apache的虚拟主机配置
虚拟主机(Virtual Host)是一种在单个物理服务器上托管多个域名或网站的技术.通过虚拟主机,可以将一个物理服务器划分为多个逻辑的虚拟服务器,每个虚拟服务器都可以拥有自己独立的域名、网站和配置.
虚拟主机常见的应用场景包括:
共享主机服务 :虚拟主机允许多个用户共享同一台物理服务器,并在各自的虚拟主机中托管自己的网站.这种方式非常适合小型网站、个人博客和中小型企业,因为可以降低成本并提供基本的托管功能.
多域名托管 :虚拟主机可以让你在同一台服务器上托管多个域名.这意味着你可以拥有多个网站,并通过虚拟主机将它们隔离开来.每个虚拟主机可以具有独立的域名、独立的文件夹和独立的配置,使得不同网站之间相互独立且互不干扰.
子域名管理 :虚拟主机可以用于在同一域名下创建多个子域名,并为每个子域名分配独立的虚拟主机.这对于大型网站或企业来说很有用,因为它们可以将不同的功能或服务划分到不同的子域名下,便于管理和维护.
测试和开发环境 :虚拟主机提供了一个方便的方式来创建测试和开发环境.你可以在同一台服务器上创建一个虚拟主机,用于开发和测试你的网站或应用程序,而不会影响生产环境.
总之,虚拟主机是一种有效的方式来提供共享主机服务、多域名托管、子域名管理和测试/开发环境.它允许在单个物理服务器上运行多个独立且隔离的网站,从而提供更高的灵活性和资源利用率.
基于域名
为虚拟主机提供域名解析 1 2 3 vim /etc/hosts 127.0.0.1 www.kgc.com www.kcce.com
为虚拟主机准备网页文档 1 2 3 mkdir -p /var/www/html/kgccom /var/www/html/kccecomecho " www.kgc.com" > /var/www/html/kgccom/index.htmlecho " www.kcce.com " > /var/www/html/kccecom/index.html
添加虚拟主机配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 vim /etc/httpd/conf.d/httpd-vhosts.conf <VirtualHost *:80> DocumentRoot "/var/www/html/kgccom" ServerName www.kgc.com ErrorLog "logs/www.kgc.com.error_log" CustomLog "logs/www.kgc.com.access_log" common <Directory "/var/www/html/kgccom" > Require all granted </Directory> </VirtualHost> <VirtualHost *:80> DocumentRoot "/var/www/html/kccecom" ServerName www.kcce.com ErrorLog "logs/www.kcce.com.error_log" CustomLog "logs/www.kcce.com.access_log" common <Directory "/var/www/html/kccecom" > Require all granted </Directory> </VirtualHost>
重启Apache服务systemctl restart httpd.service
基于端口 基于实验一修改配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 vim /etc/httpd/conf/httpd.conf listen 5050 listen 8080 vim /etc/httpd/conf.d/httpd-vhosts.conf <VirtualHost *:5050> DocumentRoot "/var/www/html/kgccom" ServerName www.kcce.com ErrorLog "logs/www.kgc.com.error_log" CustomLog "logs/www.kgc.com.access_log" common <Directory "/var/www/html" > Require all granted </Directory> </VirtualHost> <VirtualHost *:8080> DocumentRoot "/var/www/html/kccecom" ServerName www.kcce.com ErrorLog "logs/www.kcce.com.error_log" CustomLog "logs/www.kcce.com.access_log" common <Directory "/var/www/html/kccecom" > Require all granted </Directory> </VirtualHost> systemctl restart httpd netstat -ntap
基于IP 此前我们有两张网卡地址分别为:192.168.226.133和192.168.226.134,此处需要用上.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 vim /etc/httpd/conf/httpd.conf Listen 192.168.226.133:80 Listen 192.168.226.134:80 vim /etc/httpd/conf.d/httpd-vhosts.conf <VirtualHost 192.168.226.133:80> DocumentRoot "/var/www/html/kccecom/" ErrorLog "logs/www.accp.com.error_log" CustomLog "logs/www.accp.com.access_log" common <Directory "/var/www/html/" > Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.226.134:80> DocumentRoot "/var/www/html/kgccom/" ErrorLog "logs/www.accp02.com.error_log" CustomLog "logs/www.accp02.com.access_log" common <Directory "/var/www/html/" > Require all granted </Directory> </VirtualHost>
https加密访问
HTTPS和HTTP的区别 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息.HTTP协议以明文方式发送内容,不提供任何方式的数据加密 如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS. 为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密. HTTPS和HTTP的区别主要为以下四点: 一、https协议需要到ca申请证书,一般免费证书很少,需要交费. 二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议. 三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443. 四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全.
Apache服务加密 1 2 3 4 5 6 7 8 9 10 11 12 13 14 yum install mod_ssl -y systemctl restart httpd cd /etc/httpd/conf.d/ ls firewall-cmd --zone=public --add-port=443/tcp --permanent firewall-cmd --reload netstat -antlupe | grep httpd
SSL配置文件解读 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 Listen 443 https SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog SSLSessionCache shmcb:/run/httpd/sslcache(512000) SSLSessionCacheTimeout 300 SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin <VirtualHost _default_:443> ServerName apache_server.killer.com:443 DocumentRoot "/www/html" ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA SSLCertificateFile /etc/pki/tls/certs/apache_server.killer.com.crt SSLCertificateKeyFile /etc/pki/tls/private/apache_server.killer.com.key
网址重写 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 cd /etc/httpd/conf.dvim killer.conf <VirtualHost *:80> ServerName login.killer.com RewriteEngine on RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301] </VirtualHost> <VirtualHost *:443> ServerName login.killer.com DocumentRoot /www/html CustomLog logs/login.log combined SSLEngine on SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key </VirtualHost> <Directory "/www/html" > Require all granted </Directory> systemctl restart httpd