Web服务器

基础知识篇

1) https:基于openssl的http

http:hypertext transfer protocol 超文本传输协议

传输文本信息

80/tcp端口

html: hypertext mark language  超文本标记语言

c/s架构:client/server

css:Cascading Style Sheet 风格样式表/层叠样式表

CGI :common gateway interface 通用网关接口

TCP:Transmission Control Protocol 传输控制协议

UDP 是User Datagram Protocol的简称,用户数据报协议

MIME:multipurpose internet mail extensions 多功能联网邮件扩展

URI: uniform resource indentifier 统一资源标识符

url:uniform resource locator 统一资源定位

urn:uniform resource name  统一资源命名符

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法.

MPM:multipath processing module  多功能进程模块

prefork--一个进程响应一个请求

worker:一个进程生成多个线程,一个线程响应一个请求

event:事件驱动模式

HTTP协议详解之请求篇

http请求由三部分组成,分别是:请求行、消息报头、请求正文

1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF  
其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET      请求获取Request-URI所标识的资源
POST     在Request-URI所标识的资源后附加新的数据
HEAD     请求获取由Request-URI所标识的资源的响应消息报头
PUT      请求服务器存储一个资源,并用Request-URI作为其标识
DELETE   请求服务器删除Request-URI所标识的资源
TRACE    请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
应用举例:
GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,eg:GET /form.html HTTP/1.1 (CRLF)

POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。
eg:POST /reg.jsp HTTP/ (CRLF)
Accept:p_w_picpath/gif,p_w_picpath/x-xbit,... (CRLF)
...
HOST:www.nit.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF)          //该CRLF表示消息报头已经结束,在此之前为消息报头
user=jeffrey&pwd=1234   //此行以下为提交的数据

HEAD方法与GET方法几乎是一样的,对于HEAD请求的回应部分来说,它的HTTP头部中包含的信息与通过GET请求所得到的信息是相同的。利 用这个方法,不必传输整个资源内容,就可以得到Request-URI所标识的资源的信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否 更新。

HTTP协议详解之请求篇

应用举例:
GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,eg:GET /form.html HTTP/1.1 (CRLF)

POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。
eg:POST /reg.jsp HTTP/ (CRLF)
Accept:p_w_picpath/gif,p_w_picpath/x-xbit,... (CRLF)
...
HOST:www.nit.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF)          //该CRLF表示消息报头已经结束,在此之前为消息报头
user=jeffrey&pwd=1234   //此行以下为提交的数据

HEAD方法与GET方法几乎是一样的,对于HEAD请求的回应部分来说,它的HTTP头部中包含的信息与通过GET请求所得到的信息是相同的。利 用这个方法,不必传输整个资源内容,就可以得到Request-URI所标识的资源的信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否 更新。

HTTP协议详解之响应篇

HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文
1、状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK       //客户端请求成功
400 Bad Request   //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报                  //头域一起使用
403 Forbidden   //服务器收到请求,但是拒绝提供服务
404 Not Found   //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable   //服务器当前不能处理客户端的请求,一段时间后,                          //可能恢复正常
eg:HTTP/1.1 200 OK (CRLF)

Web服务器搭建的过程

一.基于rpm包的 httpd的基础信息:

首先必须下载安装httpd服务程序包,其他相应的包,如果没安装的也要安装,这里不再多说。

服务脚本:/etc/rc.d/init.d/httpd

运行目录:/etc/httpd

配置文件:/etc/httpd/conf/

主配置文件:httpd.conf

扩展配置:/etc/httpd/conf.d/*.conf

socket: http: 80/tcp, https: 443/tcp

网页文件目录(DocumentRoot):/var/www/html

CGI: /var/www/cgi-bin/

二.配置文件/etc/httpd/conf/httpd.conf的构成:主服务器和虚拟主机不能同时启用

全局配置:对主服务器或虚拟机都有效,且有些功能是服务器自身工作属性;

主服务器:主站属性;

虚拟主机:虚拟主机及属性定义

全局配置:

Listen ip:port------------监听端口

Eg:Listen 172.16.0.0:80监听172.16网段内所有主机的80端口

# httpd -D DUMP_MODULES  ---------------显示出所有与httpd有关的模块

Prefork:多道处理模式的一种,一个进程响应一个请求

主进程功能

(1) 绑定特权端口;

(2) 派发或回收子进程;

(3) 读取分析主配置文件;

<IfModule prefork.c>

StartServers       8                     ----------------服务器启动了的空闲子进程数

MinSpareServers    5                    ----------------最小空闲子进程数,为了保证有足够的进程能够接受请求

MaxSpareServers   20                    ----------------最大空闲子进程数,为了确保服务器负载不要过大

ServerLimit      256                    -----------------最多允许主进程派生的处于活动状态的进程

MaxClients      256               ----------------最大允许的客户请求,多于上边的进程就排队,小于进程服务器就很轻松了

MaxRequestsPerChild  4000               ----------------每个进程在保持连接的时候最多允许多少请求,超出就kill掉

</IfModule>

Worker:多道处理模式的一种,一个进程生成多个线程,一个线程响应一个请求。

<IfModule worker.c>

StartServers         4                     与prefork相似,只不过,这时的进程都变成了线程。

MaxClients         300                     最多允许连进来的客户端个数

MinSpareThreads     25                     最小空闲线程

MaxSpareThreads     75                     最大空闲线程

ThreadsPerChild     25                      每个进程允许生成多少个线程

MaxRequestsPerChild  0                      0表示无限,子线程永不销毁

</IfModule>

MaxRequestsPerChild设置的是每个子进程可处理的请求数,0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:

  ◆ 可防止意外的内存泄漏;

  ◆ 在服务器负载下降的时侯会自动减少子线程数。

Linux不是真正意义的对线程管理的内核,对进程和线程的管理一样,因此,在轻量级linux上使用worker模式性能没有prefork好。所以,默认使用prefork,而不是worker。要启用worker工作模式,就得修改配置文件/etc/sysconfig/httpd,启用HTTPD=/usr/sbin/httpd.worker,启用/etc/sysconfig/httpd配置文件中的HTTPDD=/user/sbin/httpd.worker后,系统再次启动httpd服务,就是工作在了httpd.worker的工作模式下。

没有启动worker工作模式时候的httpd进程

# ps aux | grep httpd

root      3664  0.0  0.3 184252  3884 ?        Ss   10:07   0:00 /usr/sbin/httpd

apache    3666  0.0  0.2 184164  2748 ?        S    10:07   0:00 /usr/sbin/httpd

apache    3667  0.0  0.2 184252  2540 ?        S    10:07   0:00 /usr/sbin/httpd

apache    3668  0.0  0.2 184252  2540 ?        S    10:07   0:00 /usr/sbin/httpd

apache    3669  0.0  0.2 184252  2540 ?        S    10:07   0:00 /usr/sbin/httpd

apache    3670  0.0  0.2 184252  2540 ?        S    10:07   0:00 /usr/sbin/httpd

apache    3671  0.0  0.2 184252  2540 ?        S    10:07   0:00 /usr/sbin/httpd

apache    3672  0.0  0.2 184252  2540 ?        S    10:07   0:00 /usr/sbin/httpd

apache    3673  0.0  0.2 184252  2540 ?        S    10:07   0:00 /usr/sbin/httpd

apache    3674  0.0  0.2 184252  2540 ?        S    10:07   0:00 /usr/sbin/httpd

root      3676  0.0  0.0 103244   832 pts/0    S+   10:07   0:00 grep httpd

启动worker工作模式后的httpd进程

# ps aux | grep httpd

root      3532  0.0  0.4 184456  4088 ?        Ss   10:06   0:00 /usr/sbin/httpd.worker

apache    3534  0.0  0.2 184172  2748 ?        S    10:06   0:00 /usr/sbin/httpd.worker

apache    3535  0.0  0.5 528716  5428 ?        Sl   10:06   0:00 /usr/sbin/httpd.worker

apache    3536  0.0  0.5 528716  5432 ?        Sl   10:06   0:00 /usr/sbin/httpd.worker

apache    3537  0.0  0.5 528716  5432 ?        Sl   10:06   0:00 /usr/sbin/httpd.worker

root      3648  0.0  0.0 103244   832 pts/0    S+   10:06   0:00 grep httpd

虽然worker已经启动,但笔者不明白为什么httpd -l显示出来的模块还是prefork,有懂的读者,请为笔者留言。

# httpd -l                            --------------------显示核心模块,httpd不需要写成httpd.prefork,这是默认的

Compiled in modules:                  -------------------系统默认直接编辑进的模块

core.c

prefork.c

http_core.c

mod_so.c

# httpd -t     -----------检测语法错误

# service httpd configtest   ----测试语法,与上相同

# httpd -D DUMP_MODULES   共享模块

大多数配置修改后,使用service httpd reload即能生效;而修改监听的地址和端口通常需要重启服务;

Event:多道处理模式的一种,用来测试,就不做多说了。

Keepalive:保持连接---------长连接

KeepAlive {On|Off}------------------------------空间的服务器使用on,繁忙的服务器使用off,保持连接,请求多了,满足不了大多数客户需求。

KeepAliveTimeout 2

MaxKeepAliveRequests 50

配置加载的模块

LoadModule foo_module modules/mod_foo.so

LoadModule 模块名称   模块路径

ServerName www.example.com-----定义站点名称, 要启用或编辑/etc/hosts,否则会因为web服务器反解ip找寻主机名,如果找到的主机与当前主机名不匹配就会报错。

如果没有启用,/etc/sysconfig/network中定义的主机名为www.website.com,而在/etc/hosts中没有为主机定义相应的ip,那么就会出现如下错误

# httpd -t

httpd: apr_sockaddr_info_get() failed for www.website.com

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Syntax OK

这是一个很烦人的错误,要想通过,必须同时修改两个地方,即:/etc/hosts和/etc/sysconfig/network

在/etc/hosts文件中添加解析记录,在/etc/sysconfig/network中将主机名修改为和添加的解析记录主机名相同。

不过这时,主机还不能识别,需要重新启动才能识别,不过,通过一条命令可以免除重启。

#hostname 主机名

这里的主机名要跟上面配置的主机名相同。

也可以在/etc/httpd/conf/httpd.conf文件中直接启用主机名的 配置。

主服务器配置

DocumentRoot "/var/www/html"-------------定义站点根目录

<Directory "/var/www/html">------------如果是站点根目录,定义的是整个站点的属性,

如果是站点上的某个目录,定义的就是这个目录的属性。

若要对某个目录进行定义,最好跟站点分开写。

Options

Indexes: 是否允许索引页面文件,建议关闭;否则,站点上的内容会被别人下载

FollowSynLinks: 是否跟随软链接文件;

SymLinksifOwnerMatch:跟随符号链接,文件的属主必须是系统的属主

ExecCGI:是否允许执行CGI脚本;

All--------------包含以上所有

None--------------采用默认选项

AllowOverride AuthConfig---是否允许覆盖----授权是对网页浏览的最高优先级,必须通过才能浏览,相当于覆盖于对ip认证之上

AuthName "Realm"---认证名称,随便写

AuthType Basic----认证类型

AuthUserFile /web/host/userfile----用户帐号文件

# htpasswd -c -m /web/host/userfile tom------------给授权的目录添加一个可以访问的用户。

-c 表示创建密码文件,如果文件中有内容,会覆盖。

-m 表示md5算法

-D 表示删除某个用户

# htpasswd -c -m userfile tom-------------添加tom的帐号密码到userfile文件

# htpasswd -m userfile jerry --------------添加jerry的帐号密码到userfile文件

# htpasswd -D userfile jerry---------------从文件userfile中删除jerry的记录。

</Directory>

Order:定义allow和deny哪个为默认法则;写在后面的为默认法则:写在前面的指令没有显式定义的即受后面的指令控制;

Order allow,deny--------------------对ip的认证

Deny from 172.16.100.177------------禁止这个ip访问

Allow from 172.16.0.0/16-------------允许这个网段的所有ip访问,除了上边的那个例外。

这种用法在2.4版本中已经不再适用,给某人或者一个组授权,应用

require user username  允许用户

require group groupname  允许组

require host hostname   允许这些主机

require all granted   允许所有主机

require all deny  拒绝所有人

注意,在配置虚拟主机的时候,要是对某个目录进行授权,可能会出现如下错误。

错误提示

这时,不妨在Allowoverride Authconfig上面加上Order allow,deny;Allow from all 这样的内容,就可以授权通过了。

虚拟服务器配置

第一步,注释掉主服务器的DocumentRoot

第二部,添加配置

<VirtualHost 172.16.254.88:80>----------虚拟主机的ip

ServerName www.website.com---------- 网站的名字,输入效果跟ip相同

DocumentRoot "/web/vhost/"--------------------网站根目录

CustomLog /web/vhost/logs/access.log common访问不出错时,日志的存放位置,

属于虚拟主机的主要配置,不能定义在 Directory中

ErrorLog /web/vhost/logs/err.log----------------------访问出错时,日志的存放位置,属于虚拟主机的主要配置

<Directory "/web/vhost/test1">------------------------------目录授权

Options Indexes------------------------以下三行是ip授权

Order allow,deny

allow from all

Allowoverride Authconfig------------------------以下五行,是授权配置

AuthName "friends"

Authtype Basic

AuthUserFile /web/vhost/userfile

Require valid-user

</Directory>

</VirtualHost>

日志文件配置成功后,访问成功,日志信息如下

日志文件所在目录/web/vhost/logs/

# tail logs/access.log

172.16.254.79 - - [21/Aug/2013:13:05:17 +0800] "GET / HTTP/1.1" 304 -

172.16.254.79 - tom [21/Aug/2013:13:05:22 +0800] "GET /test1/ HTTP/1.1" 200 710

172.16.254.79 - - [21/Aug/2013:14:01:47 +0800] "GET /img/skin/templates/thumb/107.png HTTP/1.1" 404 311

172.16.254.79 - - [21/Aug/2013:14:01:47 +0800] "GET /img/skin/templates/thumb/25.png HTTP/1.1" 404 310

172.16.254.79 - - [21/Aug/2013:14:01:47 +0800] "GET /img/skin/templates/thumb/46.png HTTP/1.1" 404 310

172.16.254.79 - - [21/Aug/2013:14:01:47 +0800] "GET /img/skin/templates/thumb/56.png HTTP/1.1" 404 310

172.16.254.79 - - [21/Aug/2013:14:01:47 +0800] "GET /img/skin/templates/thumb/108.png HTTP/1.1" 404 311

172.16.254.79 - - [21/Aug/2013:14:04:02 +0800] "GET / HTTP/1.1" 200 40

访问失败,日志信息如下

# tail logs/err.log

[Wed Aug 21 14:01:47 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/img, referer: http://www.website.com/

[Wed Aug 21 14:01:47 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/img, referer: http://www.website.com/

[Wed Aug 21 14:01:47 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/img, referer: http://www.website.com/

[Wed Aug 21 14:01:47 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/img, referer: http://www.website.com/

[Wed Aug 21 14:01:47 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/img, referer: http://www.website.com/

[Wed Aug 21 14:07:50 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/test

配置基于主机的虚拟主机

<VirtualHost 172.16.254.88:80>

ServerName www.a.com

DocumentRoot "/www/website1/"

</VirtualHost>

<VirtualHost 172.16.254.88:80>

ServerName www.b.com

DocumentRoot "/www/website2/"

</VirtualHost>

配置完成后,在物理机上添加www.a.com和www.b.com的解析记录

这样,在物理机浏览器的地址栏里输入网址www.a.com或者www.b.com就能验证其效果了。

注意,如果在地址栏里输入的是ip地址,浏览器会默认选择web服务器上定义的第一个虚拟机

基于ip的虚拟主机配置

<VirtualHost 172.16.254.80:80>

ServerName www.website1.com

DocumentRoot "/web/vhost/web1"

</VirtualHost>

<VirtualHost 172.16.254.88:80>

ServerName www.website2.com

DocumentRoot "/web/vhost/web2"

</VirtualHost>

配置完成后,在物理机配置hosts信息,否则,浏览机无法解析

基于端口的虚拟主机配置

这时,还需要在全局配置中添加一条记录

Listen 8080------------启用8080端口

<VirtualHost 172.16.254.80:8080>

ServerName www.website1.com

DocumentRoot "/web/vhost/web1"

</VirtualHost>

<VirtualHost 172.16.254.88:80>

ServerName www.website2.com

DocumentRoot "/web/vhost/web2"

</VirtualHost>

三.补充知识

路径别名

Alias /imges/ “/test/www/”

这里需要注意几点

1,/p_w_picpaths/ 和 /test/www/ 格式必须一致,即前后的/不能少

2,/p_w_picpaths/是站点的根目录下目录,而/test/www/则是服务器根目录下的目录

3,同时在两个目录下创建index.html注意,一般网站上的网页只要不是连接的网页,一般都需要使用index.html才能被识别。

4,然后再配置文件中全局配置添加记录Alias /imges/ “/test/www/”

5,若站点名字叫www.web.com,则输入www.web.com/p_w_picpaths显示的内容就会变成/test/www/下的index.html文件的内容。

Cgi脚本

可以在目录中定义,即

<Directory 目录>

Options ExecCGI

........

</Directory>

也可以定义别名

定义同路径别名

让系统上每个用户都有自己的网站

只需要将配置文件中的UserDir disabled禁用,启用Userdir public.html,然后在该用户的家目录下创建public.html目录,在该目录中创建index.html文件并编辑即可。

注意,tom的家目录访问权限必须修改。

<IfModule mod_userdir.c>

Userdir public.html

</IfModule>

# mkdir /home/tom/public.html/index.html

# cd /home/tom/public.html

# vim index.html

# chmod o+x /home/tom

服务器的状态信息

<Location /status>

SetHandler server-status ---------------apache内部独立的子功能,处理器(server-status)

Authtype Basic------------------没有启用基于ip认证order语句,就不用写allowoverride语句

AuthName "tom"

AuthUserFile "/www/userfile"

Require valid-user

#    Order deny,allow

#    Deny from all

#    Allow from .example.com

</Location>




排错:

Web出现这种错误

# service httpd status

httpd dead but subsys locked

检查服务脚本中pid文件有没有写错

pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid}

编译安装 httpd

编译安装httpd-2.4.4

依赖于更高版本的apr和apr-util,因此需要事先安装此两个包。此外,httpd还依赖于pcre的开发功能,因此,要事先安装pcre-devel包。

# yum -y install pcre-devle

(1) 编译安装apr

# tar xf apr-1.4.6.tar.bz2
# cd apr-1.4.6
# ./configure --prefix=/usr/local/apr
# make && make install

(2) 编译安装apr-util

# tar xf apr-util-1.5.2.tar.bz2

# cd apr-util-1.5.2

# ./configure --prefix=/

# tar xf apr-util-1.5.2.tar.bz2
# cd apr-util-1.5.2
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make && make install

(3) 编译安装httpd

# tar xf httpd-2.4.4.tar.bz2
# cd httpd-2.4.4
# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event
# make && make install

httpd 2.4新特性:

1、MPM可于运行时装载;

--enable-mpms-shared=all --with-mpm=event

2、Event MPM

3、异步读写

4、在每模块及每目录上指定日志级别;

5、每请求配置;<If>, <ElseIf>, <Else>;

6、增强的表达式分析器;

7、毫秒级的KeepAlive Timeout;

8、基于域名的虚拟主机不再需要NameVirtualHost指令;

9、降低了内存占用;

10、支持在配置文件中使用自定义变量;

--enable-modules=most

新增加的模块:

mod_proxy_fcgi

mod_proxy_scgi

mod_proxy_express

mod_remoteip

mod_session

mod_ratelimit

mod_request

等等;

对于基于IP的访问控制

Order allow,deny

allow from all

2.4中不再支持此方法

2.4 使用Require user

Require user USERNAME

Require group GRPNAME

Require ip IPADDR

Require not ip IPADDR

IP

NETWORK/NETMASK

NETWORK/LENGTH

NET

172.16.0.0/255.255.0.0 = 172.16.0.0/16 = 172.16

Require host HOSTNAME

Require not host HOSTNAME

HOSTNAME

DOMAIN

www.magedu.com

.magedu.com

允许所有主机访问:

Require all granted

拒绝所有主机访问:

Require all deny

Curl------------web站点测试工具之一

curl的常用选项:

-A/--user-agent <string> 设置用户代理发送给服务器

-basic 使用HTTP基本验证

--tcp-nodelay 使用TCP_NODELAY选项

-e/--referer <URL> 来源网址

--cacert <file> CA证书 (SSL)

--compressed 要求返回是压缩的形势

-H/--header <line>自定义头信息传递给服务器

-I/--head 只显示响应报文首部信息

--limit-rate <rate> 设置传输速度

-u/--user <user[:password]>设置服务器的用户和密码

-0/--http1.0 使用HTTP 1.0

实例

Web站点地址为www.a.com

# curl www.a.com-------------j将首页内容原封不动下载到本地
welcome to my home!
# curl -I www.a.com     报文的首部信息
HTTP/1.1 200 OK
Date: Fri, 23 Aug 2013 10:04:05 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Thu, 22 Aug 2013 20:43:52 GMT
ETag: "460004-14-4e48f591062e8"
Accept-Ranges: bytes
Content-Length: 20
Connection: close
Content-Type: text/html; charset=UTF-8

解释:curl -I  测试服务器某些页面是否存在,只需要看响应报文的状态码

# curl -I www.a.com/status
HTTP/1.1 401 Authorization Required
Date: Fri, 23 Aug 2013 10:07:09 GMT
Server: Apache/2.2.15 (CentOS)
WWW-Authenticate: Basic realm="status"
Connection: close
Content-Type: text/html; charset=iso-8859-1

解释:响应报文报错,因为访问状态页需要密码,没有给出密码就报错。

可以给出帐号和密码,用-u选项

# curl -I -u tom:tom www.a.com
HTTP/1.1 200 OK
Date: Fri, 23 Aug 2013 10:08:50 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Thu, 22 Aug 2013 20:43:52 GMT
ETag: "460004-14-4e48f591062e8"
Accept-Ranges: bytes
Content-Length: 20
Connection: close
Content-Type: text/html; charset=UTF-8

看下图是我配置的虚拟主机,正确访问日志为combined格式,可以通过访问日志查看curl的访问信息。

先查看正常访问信息

# curl www.a.com         正常访问
# tail -1 /www/website/logs/access.log 查看最后一行信息
172.16.254.1 - - [23/Aug/2013:18:11:37 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

解释:172.16.254.1 来自哪个客户端,访问时间,使用的http方法,返回的状态吗,使用的浏览器

# curl -A "mybrother" www.a.com 设置用户代理,也可以说是模拟一个浏览器
# tail -1 /www/website/logs/access.log
172.16.254.1 - - [23/Aug/2013:18:19:35 +0800] "GET / HTTP/1.1" 200 20 "-" "mybrother"

我们可以看到模拟出的效果

# curl -e "www.sohu.com" www.a.com -e 来源网址
# tail -1 /www/website/logs/access.log
172.16.254.1 - - [23/Aug/2013:18:22:02 +0800] "GET / HTTP/1.1" 200 20 "www.sohu.com" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

我们可以看到,打开网页是从www.sohu.com跳转而来。

# curl -0 www.a.com   -0  所使用的http的版本
# tail -1 /www/website/logs/access.log
172.16.254.1 - - [23/Aug/2013:18:25:22 +0800] "GET / HTTP/1.0" 200 20 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

可以看到HTTP的版本由之前的1.1变成了1.0

转载于:https://blog.51cto.com/qiufengsong/1279885

linux上的web服务器搭建相关推荐

  1. 怎样在linux上部署web服务器

    linux上部署web服务器 1.从Apache官网下载源码. 2.卸载原来已经存在的httpd. 3.挂载光盘准备部署httpd. 4.源码编译安装httpd, 解包 , 配置(--prefix:指 ...

  2. Linux  CentOS 7 Web服务器搭建和设置

    一. Web服务器搭建和设置(共25分)(CentOS 7) 请完成以下项目要求并给出实现步骤和测试界面图. 1. 安装Web服务器所需软件,设置服务器的IP为192.168.1.2 . 2. 在IP ...

  3. Linux上部署web服务器并发布web项目

    近在学习如何在linux上搭建web服务器来发布web项目,由于本人是linux新手,所以中间入了不少坑,搞了好久才搞出点成果. 以下是具体的详细步骤以及我对此做的一些总结和个人的一些见解,希望对跟我 ...

  4. Linux下java web服务器搭建(JDK1.6、MySQL5.1、Apache2.2+2...

    2019独角兽企业重金招聘Python工程师标准>>> 系统:Red Hat Enterprise Linux 5 32位(自带Httpd) 软件准备: 1. jdk-6u31-li ...

  5. Linux下的web服务器搭建

    Web服务器:专门处理HTTP请求的服务器,常被称为Web服务器. 有时间好好研究这个. 另外可以参照  mac/linux安装php那篇一起看看 零. 一.httpd简介(也可称为apache) 常 ...

  6. Linux简单的web服务器搭建实验

    实验要求: 1.要求搭建web服务器,能够访问到网页内容为"小胖,你咋这么胖呢!" 2要求搭建web服务器,创建基于域名的虚拟主机,能够使用www.xiaopang.com和www ...

  7. 网络应用发布到linux上的web服务器上页面上显示麻将牌式字符的问题

    什么是麻将牌式字符,就是中文显示为一个竖立长方形框框里面有四个数字或字母,请看下图中中文,日文和韩文的显示就知道了: 为什么会遇到这个问题? 系统不支持中文,日文和韩文字体. 如何解决: 安装中文字体 ...

  8. Linux下的WEB服务器的搭建实战

    Linux下的web服务器搭建详细过程 每次搭建一个服务器之前,比如MySQL.DNS.WEB等首先要挂载磁盘目录文件 挂载就是当要使用某个设备时(例如光盘或软盘),必须先将它们对应放到 Linux ...

  9. apache java 搭建服务器搭建_Linux下Java Web服务器搭建(Apache2.2+2Tomcat6)

    Linux下Java web服务器搭建(JDK1.6.MySQL5.1.Apache2.2+2Tomcat6+svn1.6) 四.apache与tomcat整合 软件准备: 用于apache与tomc ...

最新文章

  1. RabbitMQ 学习
  2. 使用FUSE挖掘文件上传漏洞
  3. 字符输出流写文本文件【Writer、FileWriter 、BufferedReader 】
  4. 【渝粤题库】国家开放大学2021春2094法理学题目
  5. python入门指南全文阅读-Python-3.4-入门指南(官方中文版).pdf
  6. 操作系统中涉及的各种调度算法
  7. 12. jQuery - 获得内容和属性
  8. 项目合同管理:合同分类、费用支付方式、违约责任承担方式、签订注意事项、合同索赔流程
  9. Cannot connenct to relay host smtp.163.com (php邮件发送失败)
  10. 推荐3个游戏小程序,让你整个暑假都充实!
  11. 服务器被入侵如何排查
  12. 5.2 主机扫描:主机探测
  13. hadoop大数据生态集群
  14. BeanUtils只拷贝对象中属性值不为null的属性
  15. 强烈建议三星S7edge刷番茄花园V14终结版
  16. 【小经验】Windows 11 家庭中文版连接远程桌面,出现身份验证错误。要求的函数不受支持
  17. webp动图转gif
  18. STM32平衡小车 TB6612电机驱动学习
  19. maya通过python输出fbx_Python:Maya2WRL简单导出脚本(source included)
  20. indexOf() 的用法

热门文章

  1. 用EnumProcesses()枚举进程
  2. c语言 结构体_C语言 技能提升 系列文章 (三)结构体
  3. 什么从什么写短句_新年新气象跨年了,准备好发什么说说了吗
  4. java解析时已到达文件结尾_IO流读取到文件末尾继续读取
  5. html中文本格式化、预格式化、计算机输出标签、address、title、文字方向、著作
  6. apache配置php版本,apache配置支持多版本php
  7. 编译器和链接器的任务是什么
  8. ActiveMQ(三):ActiveMQ的安全机制、api及订阅模式demo
  9. 华语乐坛趋势报告(2022)
  10. DTC跨境电商白皮书