名词解释
1、URL:Uniform Resource Locator,统⼀资源定位符
2、⽹址格式:<协议>://<主机或主机名>[:port]/<⽬录资源,路径>
3、主机地址/主机名:主机地址是服务器在因特⽹所在的IP地址。主机名就需要域名解析来处理
4、主机文件:Linux中一般位于/etc/host,Windows位于C:\Windows\system32\drivers\etc\hosts
5、端⼝号(port):http为80,https为443
0-1023:永久地分配给固定的应⽤程序使⽤,特权端⼝(只有管理员有权限启⽤并让进程监听)1024-41951:注册端⼝,但不是特别严格,分配给程序注册为某应⽤使用(3306/TCP)41952-60000:客⼾端程序随机使⽤的端⼝,动态端⼝,或私有端⼝
httpd相关文件
安装httpd:
yum install httpd -y
Apache HTTP服务器是通过简单的⽂本⽂件配置的。这些⽂件可能位于不同的位置,具体取决于服务器的安装⽅式。
这些⽂件的公共位置如下所示
服务根目录(ServerRoot) | /etc/httpd |
主配置文件(
Primary Config File)
|
/etc/httpd/conf/httpd.conf
|
其他配置文件(
Other Config Files)
|
/etc/httpd/conf.d/
|
⽤于载⼊ Red Hat Enterprise Linux 中打包动 态模块的配置⽂件的辅助⽬录。在默认配置 中,⾸先会处理这些配置⽂件。
|
/etc/httpd/conf.modules.d/
|
模块位置(
Module Locations)
|
/usr/lib/httpd/modules
|
网站根目录(
DocumentRoot)
|
/var/www/html/
|
错误日志(
ErrorLog)
|
/var/log/httpd/error_log
|
访问日志(
AccessLog)
|
/var/log/httpd/access_log
|
cgi-bin
|
/var/ w /cgi- bin (empty and disabled by default)
|
二进制(
binary)
|
/usr/sbin/httpd
|
运行时目录(
runtime directory)
|
/etc/httpd/run
|
1、 主要的配置文件 /etc/httpd/conf/httpd.conf2、 额外的参数文件 /etc/httpd/conf.d * .conf如果你不想要修改原始配置文件 httpd.conf 的话,那么你可以将你自己的额外参数文件独立出来,例如你想要有自己的额外设置值,可以将它写入 /etc/httpd/conf.d/zhuji.conf(注意,扩展名一定是.conf ),而启动 Apache 时,这个文件就会被读入主要配置文件当中了3、 默认的首页所在目录 /var/ w /html/ ,当输入网址时所显示的数据,就是放在这个目录当中的首页文件(默认为index.html )4、 默认给一些可执行的CGI (网页程序)程序放置的目录 /var/ w /cgi- bin/ ,当输入网址/cgi- bin/ 时所显示的数据所在。5、 默认的Apache 日志文件都放在 /var/log/httpd/ ,对于流量比较大的网站来说,一个星期的日志文件的数据可以达到1GB 左右如果从源代码处安装了httpd,那么配置⽂件的默认位置是/usr/local/apache2/conf
http模块解释
httpd是一个模块化服务器,即核心服务器中只包含最基本的功能,但是可以通过可加载到httpd中的模块来提供扩展功能。默认情况下,编译时服务器中包含一组基本模块,如果将服务器编译为使用动态加载的模块,则可以单独编译模块,并随时使用LoadModule指令添加模块,否则必须重新编译httpd以添加或删除模块。通过将指令封装在块中,可以在特定模块存在的条件下包含配置指令,但是块不是必须的,在某些情况下可能会掩盖缺少重要模块的事实
httpd -l:查看当前编译到服务器中的模块
httpd -M:查看动态加载的模块
httpd主配置文件解释
cat /etc/httpd/conf/httpd.conf
该文件内容如下:
目录树的顶部
ServerRoot "/etc/httpd"
侦听特定的IP地址或端口(必需指令,配置文件没有会导致服务器无法启动)
Listen 80
允许在服务器配置文件中包含其他配置文件(通配符表达式与任何文件不匹配则Include指令将失败并出错;如果忽略不匹配的通配符,则可以使用IncludeOptional指令)
Include conf.modules.d/*.conf
运行httpd的用户/组的名称
User apache
Group apache
电子邮件地址
ServerAdmin root@localhost
服务器用于标识自身的名称和端口
ServerName 0.0.0.0:80
这里拒绝所有/的访问
<Directory />
AllowOverride none
Require all denied
</Directory>
提供文档的目录
DocumentRoot "/var/www/html"
允许对该目录的访问
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
放宽对默认文档根目录的访问
<Directory "/var/www/html">
启用了基于文件目录和符号链接的访问
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
如果指定模块存在,则按照指定的指令执行
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
应用于匹配文件名的指令,拒绝了.ht前缀的所有文件
<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>
# alias:将web路径映射到文件系统路径,并用于访问不在DocumentRoot下的内容。
# ScriptAlias:控制哪些目录包含服务器脚本。脚本别名基本上与别名相同,只是目标目录中的文档被视为应用程序,并在请求时由服务器运行,而不是作为发送到客户端的文档。关于尾随“/”的规则适用于ScriptAlias指令和Alias指令。
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
对cgi目录的定义
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
对mime(多用途互联网邮件扩展)的配置
<IfModule mime_module>
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
字符集配置
AddDefaultCharset UTF-8
对mime的配置
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
启用发送文件
EnableSendfile on
包含其他配置文件
IncludeOptional conf.d/*.conf
httpd使用
基本及相关命令
1、启动httpd服务
systemctl start httpd
2、停止httpd服务
systemctl stop httpd
3、重启httpd服务
systemctl restart httpd
4、查看httpd绑定IP和端口
5、查看httpd进程
6、防火墙放行端口
7、重启防火墙规则
8、修改SELinux模式
9、网卡修改
设置网卡IPV4地址
nmcli connection modify ens160 ipv4.addresses 192.168.182.128/24
增加网卡IPV4地址
nmcli connection modify ens160 +ipv4.addresses 192.168.182.129/24
删除网卡IPV4地址
nmcli connection modify ens160 -ipv4.addresses 192.168.182.129/24
设置IP地址获取方式为手动
nmcli connection modify ens160 ipv4.method manual
设置网卡的网关IP地址
nmcli connection modify ens160 ipv4.gateway 192.168.182.2
设置网卡的DNS地址
nmcli connection modify ens160 ipv4.dns 114.114.114.114
设置自动启动网卡
nmcli connection modify ens160 connection.autoconnect yes
启动网卡
nmcli connection up ens160
显示会话
nmcli connection show
显示设备
nmcli device
1、基于IP、端口、域名的虚拟主机
1.1基于IP
1、进入副配置文件目录下并创建一个后缀为.conf的配置文件
cd /etc/httpd/conf.d
vim vhost.conf
2、编写文件内容
3、创建对应目录及index.html
mkdir /testip1 /testip2
echo welcome 192.168.182.128 > /testip1/index.html
echo welcome 192.168.182.129 > /testip2/index.html
4、网卡添加新地址
nmcli connection modify ens160 ipv4.addresses 192.168.1182.128/24
nmcli connection modify ens160 ipv4.addresses 192.168.182.128/24
nmcli connection modify ens160 ipv4.method manual
nmcli connection modify ens160 +ipv4.addresses 192.168.182.129/24
nmcli connection modify ens160 connection.autoconnect yes
nmcli connection up ens160
5、防火墙放行端口及重启
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
6、修改SELinux
setenforce 0
7、启动httpd
systemctl start httpd
结果:
1.2基于端口
1、进入副配置文件目录下并创建一个后缀为.conf的配置文件
vim /etc/httpd/conf.d/virport.conf
2、编写文件内容
3、创建对应目录及index.html
mkdir /testport1 /testport2
echo welcome 192.168.182.130:80 > /testport1/index.html
echo welcome 192.168.182.130:81 > /testport2/index.html
4、网卡添加新地址
nmcli connection modify ens160 +ipv4.addresses 192.168.182.130/24
nmcli connection modify ens160 connection.autoconnect yes
nmcli connection up ens160
5、防火墙放行端口及重启
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
6、修改SELinux
setenforce 0
7、启动httpd
systemctl start httpd
结果:
1.3基于域名
1、进入副配置文件目录下并创建一个后缀为.conf的配置文件
vim /etc/httpd/conf.d/virname.conf
2、编写文件内容
3、创建对应目录及index.html
mkdir /testname1 /testname2 /testname3
echo welcome www.haha.com > /testname1/index.html
echo welcome www.xixi.com > /testname2/index.html
echo welcome www.hehe.com > /testname3/index.html
4、网卡添加新地址
nmcli connection modify ens160 +ipv4.addresses 192.168.182.131/24
nmcli connection modify ens160 +ipv4.addresses 192.168.182.132/24
nmcli connection modify ens160 connection.autoconnect yes
nmcli connection up ens160
5、修改本地地址解析文件/etc/hosts
6、防火墙放行端口及重启
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
7、修改SELinux
setenforce 0
8、启动httpd
systemctl start httpd
结果:
2、基于https的虚拟主机
1、安装ssl模块
yum install mod_ssl -y
2、进入/etc/pki/tls/certs目录中生成秘钥和证书
cd /etc/pki/tls/certs
#生成秘钥
openssl genrsa > jiami.key
#生成证书
openssl req -utf8 -new -key jiami.key -x509 -days 100 -out jiami.crt
3、将秘钥和证书放置于正确的路径中
由于在/etc/pki/tls/certs/目录下生成秘钥和证书
所以证书文件不用移动
只需移动秘钥文件
mv /etc/pki/tls/private/jiami.key /etc/pki/tls/certs/jiami.crt
4、进入副配置文件目录下并创建一个后缀为.conf的配置文件
vim /etc/httpd/conf.d/virhttps.conf
5、编写文件
6、网卡添加新地址
nmcli connection modify ens160 +ipv4.addresses 192.168.182.133/24
nmcli connection modify ens160 connection.autoconnect yes
nmcli connection up ens160
7、防火墙放行端口及重启
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
8、修改SELinux
setenforce 0
9、启动httpd
systemctl start httpd
结果:
补充:安装ssl模块后/etc/httpd/conf.d/下出现一个ssl.conf文件
vim /etc/httpd/conf.d/ssl.conf
其内容如下:
Listen 443 https SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog SSLSessionCache shmcb:/run/httpd/sslcache(512000) SSLSessionCacheTimeout 300 SSLCryptoDevice builtin <VirtualHost _default_:443> ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLHonorCipherOrder on SSLCipherSuite PROFILE=SYSTEM SSLProxyCipherSuite PROFILE=SYSTEM SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
其中重要的有三句并且需要写入conf文件中:
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/localhost.crtSSLCertificateKeyFile /etc/pki/tls/private/localhost.key
3、基于用户认证的虚拟主机
1、创建账号文件并建立用户信息
第一次使用htpasswd命令建立目录并添加用户需加-c
htpasswd -c /etc/httpd/zhanghao zhangsan
htpasswd /etc/httpd/zhanghao lisi
2、进入副配置文件目录下并创建一个后缀为.conf的配置文件
vim /etc/httpd/conf.d/viruser.conf
3、编写文件内容
4、网卡添加新地址
nmcli connection modify ens160 +ipv4.addresses 192.168.182.134/24
nmcli connection modify ens160 connection.autoconnect yes
nmcli connection up ens160
5、创建/testuser目录
mkdir /testuser
echo welcome user > /testuser/index.html
6、创建/mysecret目录
mkdir /mysecret
echo welcome to mysecret > /mysecret/index.html
7、修改主配置文件(将其注释取消并把www.example.com修改为0.0.0.0)
8、防火墙放行端口及重启
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
9、修改SELinux
setenforce 0
10、启动httpd
systemctl start httpd
结果:
4、基于python的虚拟主机
1、安装模块
yum install python3-mod_wsgi -y
2、在/var/www/cgi-bin目录下编写python文件
vim /var/www/cgi-bin/haha.wsgi
3、进入副配置文件目录下并创建一个后缀为.conf的配置文件
vim /etc/httpd/conf.d/virpython.conf
4、编写文件
5、修改本地解析文件
6、网卡新增IP地址
nmcli connection modify ens160 +ipv4.addresses 192.168.182.135/24
nmcli connection modify ens160 connection.autoconnect yes
nmcli connection up ens160
7、防火墙放行端口及重启
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
8、修改SELinux
setenforce 0
9、启动httpd
systemctl start httpd
结果: