施秉网站建设网站开发工程师项目经验

当前位置: 首页 > news >正文

施秉网站建设,网站开发工程师项目经验,php创建一个网站,免费搭建永久网站Web Server - httpd配置二3.1 httpd配置3.1.1 基于用户的访问控制3.1.2 basic认证配置示例#xff1a;1. 添加用户2. 添加网页文件3. 定义安全域4. 修改父目录权限5. 访问效果6. 在配置文件中定义一个.htaccess隐藏文件7. 添加组3.1.3 虚拟主机1. 构建方案2. 基于… Web Server - httpd配置二3.1 httpd配置3.1.1 基于用户的访问控制3.1.2 basic认证配置示例1. 添加用户2. 添加网页文件3. 定义安全域4. 修改父目录权限5. 访问效果6. 在配置文件中定义一个.htaccess隐藏文件7. 添加组3.1.3 虚拟主机1. 构建方案2. 基于IP的虚拟主机示例3. 基于端口的虚拟主机4. 基于FQDN的虚拟主机5. 开启status功能3.2 httpd的功能特性3.2.1 CGICommon gateway interface3.2.2 ScriptAlias 指令配置脚本执行目录3.2.3 使用mod_deflate模块压缩页面优化传输速率3.2.4 https(http over ssl)使用mod_ssl支持https3.3 常用命令、工具3.3.1 常用命令3.3.2 常用工具3.1 httpd配置 3.1.1 基于用户的访问控制 认证质询 WWW-Authenticate:响应码为401拒绝客户端请求并说明要求客户端提供帐号及密码 认证 Authorization:客户端用户填入帐号和密码后在此发送请求报文认证通过时则服务器发送响应的资源 认证方式 basic:明文 digest:消息摘要认证 安全域 需要用户认证后方能访问的路径应该通过名称对其进行标示仪表告知用户认证的原因 用户的帐号和密码存放在何处 虚拟帐号仅用于访问某服务时用到的认证标示 存储文本文件(httpd-tools/htpasswd加密工具)SQL数据库ldap目录存储 添加用户 使用专用命令完成此类文件的创建及用户管理格式 htpasswd [options] /path/to/dir username passwd -c 自动创建此处制定文件仅应该在此文件不存在时使用-mmd5格式加密-ssha格式加密-D删除指定用户-b在命令行中一并输入用户名和密码而不是根据提示输入密码-p明文密码默认md5加密 -mhtpasswd -b -c /tmp/test.users tom 123456 创建用户tom密码1234567并创建密码文件test.users 添加组 [rootk8s-node-02 apache]# cat /usr/local/apache/conf/users.group testgrp: tom jason #每一行定义一个组组中的用户用空格分开配置文件 httpd支持自定义配置文件即不必把所有配置文件都写入主配置文件 user/group进程安全上下文一个进程是否能访问某个文件取决于2者 1.运行这个进程的用户身份 2.文件的属主属组 指定以那个用户的身份运行httpd服务进程 /etc/httpd/httpd.conf user apachegroup apache配置文件中指定user为apache Suexec:访问服务器其他非apache用户权限只是一个解决方案并不安全 3.1.2 basic认证配置示例 基于用户搭建

  1. 添加用户 [rootk8s-node-02 conf]# htpasswd -c -b ./users.passwd tom 123456 Adding password for user tom [rootk8s-node-02 conf]# cat users.passwd tom:\(apr1\)oyXRu1eD$PFtacQ2r/ioGiwZ9yJ4k8/2. 添加网页文件 [rootk8s-node-02 apache]# cat htdocs/doc/d.html h1hello python!/h13. 定义安全域 Directory /usr/local/apache/htdocs/doc/Options NoneAllowOverride NoneAuthType BasicAuthName input account and passwdAuthUserFile /usr/local/apache/conf/users.passwd#Require valid-userRequire user tom/Directory 允许帐号文件中的所有用户登陆访问 Require valid-user

  2. 修改父目录权限 如果仅添加控制块并不能起作用因为父目录的权限是允许全部访问而子目录继承父目录权限。所以还应该把父目录权限进行修改账号密码才能起作用 DocumentRoot /usr/local/apache/htdocs Directory /usr/local/apache/htdocs …Options Indexes FollowSymLinks …AllowOverride None …Require all deniedRequire user tom /Directory5. 访问效果 6. 在配置文件中定义一个.htaccess隐藏文件 [rootk8s-node-02 apache]# cat htdocs/doc/.htaccess AuthType Basic AuthName Welecon to Login AuthUserFile /usr/local/apache/conf/users.passwd Require user jason tom此处我们允许jason和tom用户访问若允许账号验证文件的所有用户均有权限访问可直接写Require valid-user即可。 为什么.htaccess文件客户端看不到呢 Files .ht*Require all denied /Files7. 添加组 基于组帐号进行认证 Directory Options NoneAllowOverride NoneAuthType BasicAuthName String(提示用户为什么认证)AuthUserFile /PATH/TO/DIR(/tmp/test.users)AuthGroupFIle /paht/to/group_fileRequire group groupname1 grpname2… /Directory配置 [rootk8s-node-02 apache]# cat /usr/local/apache/conf/users.group #添加组 testgrp: tom jason … Directory /usr/local/apache/htdocs/doc/Options NoneAllowOverride NoneAuthType BasicAuthName please input account and passwdAuthUserFile /usr/local/apache/conf/users.passwdAuthGroupFile /usr/local/apache/conf/users.group #配置组文件路径#Require valid-user#Require user tomRequire group testgrp #设置组权限 /Directory3.1.3 虚拟主机 站点标识socket IP相同端口不同IP不同端口均为默认IP和端口相同FQDN不同 1. 构建方案 创建虚拟主机有三种实现方案 基于IP 为每个虚拟主机准备至少一个ip基于端口 为每个虚拟主机使用至少一个独立port基于FQDN 为每个虚拟主机使用至少一个FQDN 注意http2.2 一般虚拟主机不要与中心主机户混用要使用虚拟主机先禁用main主机 禁用方法注释中心主机的DocumentRoot指令即可

  3. 基于IP的虚拟主机示例 ① 在本机添加三个IP并制作网页 ip address add 192.168.0.1024 dev ens33 ip address add 192.168.0.1124 dev ens33 ip address add 192.168.0.1224 dev ens33 mkdir /www;cd /www;mkdir {10..12}; echo welcome 10.com 10/index.html echo welcome 10.com 11/index.html echo welcome 10.com 12/index.html ② 修改主配置文件取消对virtual host的配置文件路径注释

    Virtual hosts

    Include conf/extra/httpd-vhosts.conf③ 编辑conf/extra/httpd-vhosts.conf [rootk8s-node-02 conf]# cat extra/httpd-vhosts.conf VirtualHost 192.168.0.10:80ServerName www.10.com #域名DocumentRoot /www/10/htdocs #文档路径Directory /www/10/htdocs #授权Options NoneRequire all granted/Directory /VirtualHostVirtualHost 192.168.0.11:80ServerName www.11.comDocumentRoot /www/11/htdocsDirectory /www/11/htdocsOptions NoneRequire all granted/Directory/VirtualHostVirtualHost 192.168.0.12:80ServerName www.12.comDocumentRoot /www/12/htdocsDirectory /www/12/htdocsOptions NoneRequire all granted/Directory/VirtualHost④ 检查语法并重启httpd httpd -t systemctl restart httpd⑤ 测试 [rootk8s-node-02 conf]# curl 192.168.0.10 welcome 10.com [rootk8s-node-02 conf]# curl 192.168.0.11 welcome 11.com [rootk8s-node-02 conf]# curl 192.168.0.12 welcome 12.com3. 基于端口的虚拟主机 添加监听端口Listen 8082 [rootk8s-node-02 extra]# cat httpd-vhosts.conf Listen 8082 Listen 8083 VirtualHost *:80ServerName www.10.comDocumentRoot /www/10/htdocsDirectory /www/10/htdocsOptions NoneRequire all granted/DirectoryErrorLog logs/www.10.com-error_logCustomLog logs/www.10.com_log common /VirtualHost VirtualHost *:8082ServerName www.11.comDocumentRoot /www/11/htdocsDirectory /www/11/htdocsOptions NoneRequire all granted/Directory/VirtualHost VirtualHost *:8083ServerName www.12.comDocumentRoot /www/12/htdocsDirectory /www/12/htdocsOptions NoneRequire all granted/Directory/VirtualHost笔者基于端口配置不好用鼓捣半天也没解决先躺着回头再来解决。

  4. 基于FQDN的虚拟主机 修改ServerName配置/etc/hosts [rootk8s-node-02 extra]# cat httpd-vhosts.conf VirtualHost 192.168.0.10:80ServerName www.10.comDocumentRoot /www/10/htdocsDirectory /www/10/htdocsOptions NoneRequire all granted/DirectoryErrorLog logs/www.10.com-error_logCustomLog logs/www.10.com_log common /VirtualHost VirtualHost 192.168.0.10:80ServerName www.11.comDocumentRoot /www/11/htdocsDirectory /www/11/htdocsOptions NoneRequire all granted/Directory/VirtualHost VirtualHost 192.168.0.10:80ServerName www.12.comDocumentRoot /www/12/htdocsDirectory /www/12/htdocsOptions NoneRequire all granted/Directory/VirtualHost [rootk8s-node-02 extra]# cat /etc/hosts 192.168.0.10 www.10.com 192.168.0.10 www.11.com 192.168.0.10 www.12.com [rootk8s-node-02 extra]# curl www.10.com welcome 10.com [rootk8s-node-02 extra]# curl www.11.com welcome 11.com [rootk8s-node-02 extra]# curl www.12.com welcome 12.com5. 开启status功能 1.加载mod_status.so模块 ①编辑httpd.conf文件vim /usr/local/apache/conf/httpd.conf ②查看行 LoadModuls status_module modules/mod_status.so 前是否有注释符号#如果有则去掉如果没有则直接进行下一步操作。 2.加载status模块的配置文件 ①编辑httpd.conf文件vim /usr/local/apache/conf/httpd.conf ②查看行 Include conf/extra/httpd-info.conf 前是否有注释符号#如果有则去掉如果没有则直接进行下一步操作。 3.开启详细状态功能 ①编辑httpd-info.conf文件vim /usr/local/apache/conf/extra/httpd-info.conf ②查看行 ExtendedStatus On 前是否有注释符号#如果有则去掉如果没有则直接进行下一步操作。 设置完这些重启apache服务后我们就可以通过域名/server-status查看apache允许状态了接下来我们来配置针对status页面做认证 关于httpd-info.conf配置内容 ① http2.2 Location /server-statusSetHandler server-statusOrder allow,denyAllow from 172.16/Location② http2.4 Location /server-statusSetHandler server-statusRequire ip 172.16/Location3.2 httpd的功能特性 3.2.1 CGICommon gateway interface CGI脚本由服务器调用, 基于浏览器的数据输入. 其工作原理如下 1 一个URL指向一个CGI脚本. 一个CGI脚本的URL能如普通的URL一样出现区别于.htm/.html静态URL,CGI的URL是动态URL。如http://xxxx.com/cgiurl 2 服务器CGI接收浏览器的请求, 按照那个URL指向对应的脚本文件(注意文件的位置和扩展名),执行CGI脚本. 3 CGI脚本执行基于输入数据的操作包括查询数据库、计算数值或调用系统中其他程序. 4 CGI脚本产生某种Web服务器能理解的输出结果. 5 服务器接收来自脚本的输出并且把它传回浏览器让用户了解处理结果 3.2.2 ScriptAlias 指令配置脚本执行目录 将URL映射到文件系统位置并将目标指定为CGI脚本。例Script Alias cgi-bin /usr/local/apache/cgi-bin/ 表示访问 ​ ​http://www.itwish.cn/cgi-bin/test​​ 时目录映射地址为/usr/local/apache/cgi-bin/test 语法1ScriptAlias [URL-path] file-path|directory-path

    定义/cgi-bin/ 目录映射到 /web/cgi-bin/ 目录 1)功能等同于2) 注意结尾的/

    1 ScriptAlias /cgi-bin/ /web/cgi-bin/
    2 Alias /cgi-bin/ /web/cgi-bin/ Location /cgi-binSetHandler cgi-scriptOptions ExecCGI /Location主配置文件 [rootVM httpd]# vi httpd.conf # 调整配置文件 IfModule mpm_prefork_moduleLoadModule cgi_module modules/mod_cgi.so #根据不同工作模式打开不同的cgi模块 /IfModuleIfModule alias_module#ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/ # 定义目录/cgi-bin/ 目录映射到 /usr/local/apache/cgi-bin/ 目录 /IfModuleDirectory /usr/local/apache/cgi-bin # 定义目录属性 AllowOverride noneOptions noneRequire all granted /Directory创建测试脚本 [rootVM cgi-bin]# vi test1 # 在cgi-bin目录中创建test1 bash 脚本 #!/bin/bash cat EOF Content-Type: text/html# 注意改行为空行 pre h1The hostname is hostname. /h1 # 显示主机名 使用bash命令 hostname 实现 The time is date. # 显示当前访问日期 使用bash命令 date 实现 /pre# 改行为空行 EOF[rootVM cgi-bin]# vi test2 # 在cgi-bin目录中创建test2 perl 脚本 #!/usr/bin/perl print content-type: text/html,\n\n; print HTML,\n; print HEAD,\n; print TITLEPerl/TITLE,\n; print /HEAD,\n; print BODY,\n; print H1Hello World/H1,\n; print /BODY,\n; print /HTML,\n;[rootVM ]# chmod ox /usr/local/apache/cgi-bin/{test1,test2} # 注意 一定要给与脚本执行权限 [rootVM cgi-bin]# curl http://192.168.71.253/cgi-bin/test1 # 测试 test1 脚本执行状况 pre h1The hostname is VM. /h1 The time is Wed Aug 15 19:26:56 CST 2018. /pre[rootk8s-node-02 apache]# curl http://192.168.71.253/cgi-bin/test2 # 测试test2 perl脚本执行状况 HTML HEAD TITLEPerl/TITLE /HEAD BODY H1Hello World/H1 /BODY /HTML3.2.3 使用mod_deflate模块压缩页面优化传输速率 使用场景 1.节约带宽 2.压缩适合于压缩的资源 SetOutputFilter DEFLATE 设置过滤器AddOutputFIlterByType DEFLATE text/html…DeflateCompressionLevel 9 压缩比BrowserMatch ^Mozilla/4 gizp-only-text/htmlBrowserMatch ^Mozilla/4.0[678] no-gzip3.2.4 https(http over ssl)使用mod_ssl支持https ssl会话简化流程 客户端发送可供选择的加密方式并向服务器请求证书服务器端发送证书以及选定的加密方式给客户端客户端取得证书并进行证书验证 如果信任给其发证书CA a验证证书来源的合法性用CA的公钥解密证书上的数字签名 b验证证书内容的合法性完整性 c检查证书的有效期限 d检查证书是否被吊销 e证书中拥有者的名字与访问的目标主机要一致客户端生成临时会话密钥对称密钥并使用服务器的公钥加密此数据发送给服务器完成密钥交换服务器用此密钥加密用户请求的资源响应客户端 注意ssl会话是基于ip地址创建所以单ip的主机上仅可以使用一个https虚拟主机 yum install mod_ssl术语PKI CA CRL X.509(V1,v2,v3) 配置httpd支持https 为服务器申请数字证书 测试通过私建CA发证书 a创建私有ca b在服务器创建证书签署请求 cca签证 配置httpd支持使用ssl及使用证书 配置文件/etc/httpd/conf.d/ssl.conf DocumentRoot ServerName SSLCertificateFile SSLCertificateKeyFile 测试基于https访问相应的主机 openssl s_client [-connect host:port][-cert filename][-CApath directroy][-CAfile filename]3.3 常用命令、工具 3.3.1 常用命令 部分命令仅限yum安装使用 yum install httpd –y #安装httpd yum info httpd #查看httpd安装包信息 yum list all http* rpm -ql httpd-tools yum repolist yum clean all yum install httpd-manual httpd -t #httpd语法测试 配置文件/etc/httpd/conf log:/var/log/httpd 网页文件/var/www/html默认根 ss -ntl : port 80 默认页/etc/httpd/conf.d/welcome.conf loadmodule httpd -M |grep mpm httpd.worker -M切换模式 httpd -l 列出模块3.3.2 常用工具 http 2.4命令行客户端工具 curl命令 curl - transfer a URLcurl [options] [URL…]options-A:-A, –user-agent STRING模拟自己是什么用户代理的 *–basic使用http基本认证–tcp-nodelay使用TCP_NODELAY-e/–refererurl上一跳 * –cacertfile ca证书ssl–compressed要求返回是压缩格式 *-H/–headerline自定义首部信息传递给服务器-I/–head 只显示响应报文首部信息–limit-raterate设置传输速率-u/–user[:password]设置服务器的用户密码-0零/–http1.0 使用http1.0elinks elinks [options] url-dump 一次显示直接结束不进入交互模式httpd自带的工具等 htpasswd apachectl rotatelogs日志滚动工具dd suexec访问某些有特殊权限配置的资源时临时切换至指定用户运行 abapache bench httpd的压力测试工具 ab,webbench,http_load,selge jmeter loadrunner tcpcopy 网站指标 css级别样式表 pvpage view一次页面访问一个页面有10个资源100W次的资源请求10W次页面访问 uvuser view独立的用户浏览量 ipip地址 每个ip地址访问量小于uv