首页 运维 linux运维 HTTP服务搭建实例详解

HTTP服务搭建实例详解

Jun 27, 2017 am 10:06 AM
http 搭建 服务

一、简介
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了。

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

以上是HTTP服务搭建实例详解的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

远程桌面连接服务用命令打开方法 远程桌面连接服务用命令打开方法 Dec 31, 2023 am 10:38 AM

远程桌面连接给很多用户的日常生活带来了方便,也有部分想使用命令来进行远程连接,操作起来更方便,那么该怎么连接呢?远程桌面连接服务用命令打开方法可以帮你解决。远程桌面连接命令怎么设置:方法一、通过运行命令远程连接1、按下“Win+R”打开“运行”输入mstsc2、然后点击“显示选项”3、输入ip地址点击“连接”。4、显示正在连接即可。方法二、通过命令提示符远程连接1、按下“Win+R”打开“运行”输入cmd2、在“命令提示符”输入mstsc/v:192.168.1.250/console

Linux 重启服务的正确方式是什么? Linux 重启服务的正确方式是什么? Mar 15, 2024 am 09:09 AM

Linux重启服务的正确方式是什么?在使用Linux系统时,经常会遇到需要重启某个服务的情况,但是有时候我们可能会在重启服务时遇到一些问题,比如服务没有真正停止或启动等情况。因此,掌握正确的重启服务的方式是非常重要的。在Linux中,通常可以使用systemctl命令来管理系统服务。systemctl命令是systemd系统管理器的一部分

理解网页重定向的常见应用场景并了解HTTP301状态码 理解网页重定向的常见应用场景并了解HTTP301状态码 Feb 18, 2024 pm 08:41 PM

掌握HTTP301状态码的含义:网页重定向的常见应用场景随着互联网的迅猛发展,人们对网页交互的要求也越来越高。在网页设计领域,网页重定向是一种常见且重要的技术,通过HTTP301状态码来实现。本文将探讨HTTP301状态码的含义以及在网页重定向中的常见应用场景。HTTP301状态码是指永久重定向(PermanentRedirect)。当服务器接收到客户端发

HTTP 200 OK:了解成功响应的含义与用途 HTTP 200 OK:了解成功响应的含义与用途 Dec 26, 2023 am 10:25 AM

HTTP状态码200:探索成功响应的含义与用途HTTP状态码是用来表示服务器响应状态的数字代码。其中,状态码200表示请求已成功被服务器处理。本文将探索HTTP状态码200的具体含义与用途。首先,让我们了解一下HTTP状态码的分类。状态码被分为五个类别,分别是1xx、2xx、3xx、4xx和5xx。其中,2xx表示成功的响应。而200是2xx中最常见的状态码

http请求415错误解决方法 http请求415错误解决方法 Nov 14, 2023 am 10:49 AM

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。

雾锁王国能野地搭建筑吗 雾锁王国能野地搭建筑吗 Mar 07, 2024 pm 08:28 PM

玩家在雾锁王国中进行游戏时可以收集不同的材料用来建造建筑,有很多玩家想知道野地搭建筑吗,雾锁王国能野地是不能搭建筑的,必须要在祭坛的范围内才可以搭建。雾锁王国能野地搭建筑吗答:不能。1、雾锁王国能野地是不能搭建筑的。2、建筑必须要在祭坛的范围内才可以搭建。3、玩家可以自行放置灵火祭坛,但一旦离开了范围,将无法进行建筑搭建。4、我们也可以直接在山上挖个洞当做我们的家,这样不用耗建筑材料。5、玩家自己搭建的建筑中,存在舒适度机制,也就是说,内饰越好,舒适度越高。6、高舒适度将为玩家带来属性加成,例如

Ubuntu PHP服务无法正常启动的解决办法 Ubuntu PHP服务无法正常启动的解决办法 Feb 28, 2024 am 10:48 AM

标题:解决Ubuntu下PHP服务无法正常启动的方法及具体代码示例在使用Ubuntu搭建网站或应用程序时,经常会遇到PHP服务无法正常启动的问题,这会导致网站无法正常访问或应用程序无法正常运行。本文将介绍如何解决Ubuntu下PHP服务无法正常启动的问题,同时提供具体的代码示例帮助读者快速解决此类故障。一、检查PHP配置文件首先,我们需要检查PHP的配置文件

如何使用C++实现HTTP流传输? 如何使用C++实现HTTP流传输? May 31, 2024 am 11:06 AM

如何在C++中实现HTTP流传输?使用Boost.Asio和asiohttps客户端库创建SSL流套接字。连接到服务器并发送HTTP请求。接收HTTP响应头并打印它们。接收HTTP响应正文并打印它。

See all articles