0

0

HTTP服务搭建实例详解

零下一度

零下一度

发布时间:2017-06-27 10:06:06

|

2450人浏览过

|

来源于php中文网

原创

一、简介
1、认识
加密网页(https): tcp:443      明文网页(http): tcp:80
survey.netcraft.net         --这个网站上可以查到最新的网站服务器的使用率
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法
2、Apache
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一,其特点如下:
1、支持最新的HTTP/1.1通信协议
2、拥有简单而强有力的基于文件的配置过程
3、支持通用网关接口
4、支持基于IP和基于域名的虚拟主机
5、支持多种方式的HTTP认证
6、集成Perl处理模块
7、集成代理服务器模块
8、支持实时监视服务器状态和定制服务器日志
9、支持服务器端包含指令(SSI)
10、支持安全Socket层(SSL)
11、提供用户会话过程的跟踪
12、支持FastCGI
13、通过第三方模块可以支持JavaServlets
3、安装:
www.apache.org --apache 官网
# yum install httpd* --安装httpd服务
# httpd -t --检查配置文件正确性
# rm -rf /etc/httpd/conf.d/welcome.conf --删除欢迎界面;因为安装了 httpd-manual ,故可以访问/ServerIp/manual
 
4、运行于两种模式:prefork,worker
prefork模式:
prefork是Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较大
这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。
worker模式:
worker使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接,内存占用量比较小,适合高流量的http服务器。缺点是假如一个线程崩溃,整个进程就会连同其任何线程一起”死掉”,所以要保证一个程式在运行时必须被系统识别为”每个线程都是安全的”。
此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。
# httpd -l --查看运行模式,默认为 prefork.c
# mv -v /usr/sbin/httpd{,.prefork} --备份prefork模式
# mv -v /usr/sbin/httpd{.worker,} --使用worker模式
 
二、配置文件详解
1、全局环境参数
ServerTokens OS --当服务器响应主机头(header)信息时显示Apache的版本和操作系统名称
ServerRoot "/etc/httpd" --服务器的基础目录,一般来说它将包含conf/和logs/子目录,其它配置文件的相对路径即基于此目录。
PidFile run/httpd.pid --第一个httpd进程(所有其他进程的父进程)的进程号文件位置。
Timeout 60 --若60秒后没有收到或送出任何数据就切断该连接
KeepAlive Off --默认不使用保持连接的功能,即客户一次请求连接只能响应一个文件,建议允许
MaxKeepAliveRequests 100 --在保持连接功能时,设置客户一次请求连接能响应文件的最大上限,超过就断开
KeepAliveTimeout 15 --在使用保持连接功能时,两个相邻的连接的时间间隔超过15秒,就切断连接
.................
Listen 80 --服务器监听的端口号;监听端口可以多开
Include conf.d/*.conf --将/etc/httpd/conf.d目录下所有以conf结尾的配置文件包含进来
User apache --提供服务的子进程的用户
Group apache --提供服务的子进程的用户组
ServerAdmin root@george.com --管理员的邮件地址
ServerName mail.george.com:80 --主站点名称(网站的主机名)
UseCanonicalName Off
DocumentRoot "/var/www/html" --设置Web文档根目录;但是可以使用符号链接和别名来指向到其他的位置;如不是绝对路径,则被假定为是相对于ServerRoot的路径
2、路径控制参数
DirectoryIndex index.html index.html.var --网站默认网页文件名,左边优先
AccessFileName .htaccess --指定保护目录配置文件的名称
---------------------------------------------------------------------------------------------------------
--用于封装一组指令,使之仅对某个目录及其子目录生效。针对文件系统上的一个目录
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Deny from 192.168.133.22
Directory-path --可以是一个目录的完整路径,或是包含了Unix shell匹配语法的通配符字符串。在通配符字符串中,"?"匹配任何单个的字符,"*"匹配任何字符序列。也可以使用"[]"来确定字符范围。在"~" 字符之后也可以使用正则表达式
Options --这个指令的值可以是“None”,“All”,或者下列选项的任意组合:Indexes(前面有'-',则关闭网站列目录的功能,无则反之);Includes;FollowSymLinks;SymLinksifOwnerMatch;ExecCGI;MultiViews
AllowOverride --控制那些被放置在.htaccess文件中的指令。它可以是All,None(看不到任何.htaccess里的任何配置),或者下列指令的组合:Options;FileInfo;AuthConfig;Limit
Order,Allow,Deny --控制谁可以获得服务。oreder的参数最终以右边的为准,顺序可以逆转
---------------------------------------------------------------------------------------------------------
--针对指定的文件可以是是在某个Directory下,也可以全局的
Order deny,allow
Allow from all
---------------------------------------------------------------------------------------------------------
-- 允许使用URL"http://servername/server-status"的形式查看服务器状态(或是信息);Location主要是控制URL
SetHandler server-status(server-info)
Order deny,allow
Allow from all
---------------------------------------------------------------------------------------------------------
Alias /url-path /filesystem-path --把URL映射到文件系统路径;(也可以自己在系统上使用 ln -s 软链接实现哦)
3、目录访问进行用户密码控制(非系统用户)
--理论也可以在Location,file
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
authname "Authenticate yourself"   --浏览器打开该url的提示语
authtype basic
authuserfile /etc/httpd/userpasswd   --用户&密码文件位置
require valid-user
# htpasswd -c /etc/httpd/userpasswd frank --创建一个允许访问用户
# htpasswd /etc/httpd/userpasswd george --再创建一个,记得 '-c' 参数,是为了创建该密码文件,只能创建第一个用户时使用。
注意:如果一个目录使用密码控制访问,那么在通过网页浏览器列出该目录的父目录时,看不到该目录,也就是说,该目录被隐藏了。但是可以通过直接输入url来访问(即使你有账户和密码也一样)。
4、基于域名的虚拟主机
NameVirtualHost *:80 --添加这条配置,将80端口设置为虚拟主机端口
--第一个虚拟主机
ServerName www.george.com
DocumentRoot /var/www/html/
..................
 
--第二个虚拟主机
ServerName mail.george.com
DocumentRoot /var/www/cgi-bin/openwebmail/
ScriptAlias /mail /var/www/cgi-bin/openwebmail/openwebmail.pl
......................
   该实验的 SeverName 参数接IP地址的话,我们也可以做基于IP的虚拟主机
5、日志参数
ErrorLog logs/error_log --错误日志的存方位置
LogLevel warn --定义错误日志等级,include: debug, info, notice, warn, error, crit, alert, emerg.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
..............
LogFormat "%{User-agent}i" agent --该四条是访问日志的缺省格式
CustomLog logs/access_log combined --使用 combined 访问日志格式
%h –客户端的ip地址或主机名
%l –The 这是由客户端 identd 判断的RFC 1413身份,输出中的符号 "-" 表示此处信息无效。
%u –由HTTP认证系统得到的访问该网页的客户名。有认证时才有效,输出中的符号 "-" 表示此处信息无效。
%t –服务器完成对请求的处理时的时间。
"%r" –引号中是客户发出的包含了许多有用信息的请求内容。
%>s –这个是服务器返回给客户端的状态码。
%b –最后这项是返回给客户端的不包括响应头的字节数。
"%{Referer}i" –此项指明了该请求是从被哪个网页提交过来的。
"%{User-Agent}i" –此项是客户浏览器提供的浏览器识别信息。
6、SSL加密配置
# yum install -y mod_ssl --安装加密模块
# vim /etc/httpd/conf.d/ssl.conf
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /etc/pki/tls/certs/localhost.crt --配置公钥文件
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key --配置秘钥文件
SSLOptions +StdEnvVars
ServerName www.george.com
DocumentRoot /var/www/cgi-bin/openwebmail/
ScriptAlias /mail /var/www/cgi-bin/openwebmail/openwebmail.pl
SSLOptions +StdEnvVars
Options Indexes
order deny,allow
Allow from all
SetEnvIf User-Agent ".*MSIE.*" \
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"
6.1、自己配置证书
# mkdir /etc/pki/test/
# cd /etc/pki/test
# openssl genrsa -out /etc/pki/test/test.key 1024 --秘钥
# openssl req -new -key test.key -out test.csr
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:guangDong
Locality Name (eg, city) [Default City]:Shenzhen
Organization Name (eg, company) [Default Company Ltd]:IT
Organizational Unit Name (eg, section) []:maintenance
Common Name (eg, your name or your server's hostname) []:www.george.com
Email Address []:root@mail.george.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:Azt
# openssl req -x509 -days 365 -key test.key -in test.csr -out test.crt --公钥
# ls --然后将下列 test.crt && test.key 配置到 /etc/httpd/conf.d/ssl.conf 即可
test.crt test.csr test.key
6.2、测试自己配置的证书
但是我们自己创建的证书在浏览器中识别是不受信任的;证书状态也是“由于CA 根证书不在“受信任的根证书颁发机构”存储区中,所以它不受信任。”
      

    需要我们自己在浏览器中手动将我们自己创建的证书(test.crt)导入到“受信任的根证书颁发机构”&&“受信任的发布者”。以谷歌浏览器为列,步骤如下:

      

    接着,会再弹出几个对话框,我们点击“下一步”——“完成”——“是”。就 OK了。

PHP Apache和MySQL 网页开发初步
PHP Apache和MySQL 网页开发初步

本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。

下载
  
此时在使用浏览器打开我们的网站,查看证书的状态“该证书没有问题”。

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

nginx浅谈
nginx浅谈

共15课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号