http整理2

2017-05-11  本文已影响0人  ckhzw

httpd相关:

。1.3 停止维护

。2.0

。 2.2 event为测试使用

。 2.4 event生产中可用;

1.高度模块化:核心模块+功能模块

2.DSO:模块支持动态装卸载;

3.MPM:Multipath processing Modules多路处理模块;

4.CGI:通用网关接口;

5.虚拟主机

6.反向代理

7.负载均衡

8.路径别名

9.丰富的认证机制:basic,digest

10.支持扩展的第三方模块;

。 CentOS 6:httpd 2.2

。配置文件:/etc/httpd/conf/httpd.conf, /etc/httpd/conf.d/*.conf

。脚本配置文件:/etc/sysconfig/httpd

。主程序文件:/usr/sbin/httpd,/usr/sbin/httpd.event,/usr/sbin/httpd.worker

。日志文件目录:/var/log/httpd/{access,error}.log

。默认站点目录:/var/www/html

-CentOS 7:httpd 2.4

。配置文件:/etc/httpd/conf/httpd.conf ,/etc/httpd/conf.d/*.conf

。模块相关配置文件:/etc/httpd/conf.modules.d/*.conf

。主程序文件:/usr/sbin/httpd #2.4支持MPM动态切换;

。日志文件目录:/var/log/httpd/{access,error}.log

。默认站点目录:/var/www/html

。 systemctl start httpd.service

。 systemctl enable httpd.service

。主配置文件:/etc/httpd/conf/httpd.conf

1.全局环境

2.中心主机

3.虚拟主机

注意:中心主机和虚拟主机不能同时使用,即使用虚拟主机前,需将中新主机的DocumentRoot注释;

配置格式:指令 值

常用配置:

Listen 80

Listen 8080

注意:修改监听的端口后必须重启服务后才会生效;

DocumentRoot "/var/www/html"

例如:http://www.mageud.com/log.jpg--->/var/www/html/log.jpg

tcp连接建立后,每个资源获取完成后不会断开连接,而是继续进行其他资源请求;为了避免大量的连接被占据,可以从数量和时间上进行限制;

KeepAlive On|Off

KeepAliveTimeout

MaxKeepAliveRequests

查看当前使用的MPM:#ps aux | grep httpd

切换MPM:vim /etc/sysconfig/httpd

重启服务后生效;

httpd -l 查看静态编译的模块

httpd -M 查看静态编译及动态编译的模块;

配置MPM:



StartServers       8 #httpd服务启动时,开启的进程数;

MinSpareServers    5 #最小空闲进程数;小于该值时,主控进程会开启一定的进程数,达到此处指定的个数;

MaxSpareServers   20 #最大空闲进程数;

ServerLimit      256 #允许启动的最大在线进程数量;

MaxClients       256 #最大并发响应数;应该小于ServerLimit中的值;

MaxRequestsPerChild  4000 #每个进程最多可以处理多少个请求,超过4000时销毁;


```

```


StartServers         4 #httpd服务启动时,启动的进程数;

MaxClients         300 #最大并发响应数

MinSpareThreads     25 #最小空闲线程数

MaxSpareThreads     75 #最大空闲线程数

ThreadsPerChild     25 #每个进程可以启动25个线程

MaxRequestsPerChild  0 #每个进程可以处理无限个请求


```

- 5.DOS

LoadModule xxx.so



- 6.基于站点的访问控制

```

 #对/var/www/html目录下的所有资源进行访问控制;

   Options Indexes FollowSymLinks

   AllowOverride None

   Order allow,deny

   Allow from all


```

```

Options:

indexes:指明的URL路径不存在时,返回列表给用户;建议关闭;

FollowSymLInks:允许跟踪符号链接文件所指向的原文件;

Includes:允许启用服务端包含;

SymLinksifOwnerMatch 原文件和链接文件的属主和属组相同时才允许跟踪访问;

ExecCGI 允许执行CGI脚本

MultiViews 允许执行内容协商;

None 全部都不;

ALL 所有都;

AllowOverride:与访问控制相关是否允许放在.htacesss文件中;None什么都不可以放,建议使用None;

```



- 7.基于ip地址的访问控制:

```

  Order allow,deny #放在后面的为默认法则;

   Allow from all

Deny from 来源地址ip或者网段;

网段地址格式:

172.16

172.16.0.0

172.16.0.0/16

172.16.0.0/255.255.0.0



   例:

     Order allow,deny

     Allow from 172.16 //仅允许172.16网段的地址访问;

```



- 8.定义站点主页面:

``DirectoryIndex index.html index.html.var``

当请求的资源不存在时,http服务器会有两种处理结果:

。返回404或者403

。将当前网页目录下的内容全部列出来;



- 9.定义路径别名:Alias

``DocumentRoot "/data/www"``

``Alias /download/ "/rpms/pub/" 注意:定义别名时,前后的斜杠应该保持一致,不然会出错,影响访问效果;``

``http://www.magedu.com/download/test.html --->/rpms/pub/test.html``



- 10.设定默认字符集

``AddDefaultCharset UTF_8``



- 11.日志相关

```

ErrorLog logs/error_log 错误日志

CustomLog logs/access_log combined 访问日志

LogFormat 定义日志格式

%% 使用的Method

%a 远程主机的ip地址

%A web服务器的ip地址

%B 响应豹纹的大小,不包含http响应首部;单位是字节;

%H 请求使用的协议

%l 远程登录的用户名,通常为一个‘-’

%{Referer} 当前页面是从哪个页面跳转过来的

%{User-Agent}客户端使用的浏览器

%m request method

%t 服务器收到请求时的时间,标准英文格式的时间;

%u 远程登录的用户名,非登录访问的时候,其为一个减号;

```



- 12.基于用户的访问控制:

```

1.定义安全域:


Options None

AllowOverride None

AuthType Basic

AuthName "dangerous" #该页面需要认证的原因说明;

AuthUserFile "/etc/httpd/conf/.htpasswd" #账号密码文件存放的位置

Require user username1 username2... 允许哪些用户登录

#Require user vaild-user #允许所有用户登录;

Require group grpname1 grpname2 ... 允许哪些组登录;

```

2.创建用户密码文件:

```

#htpasswd -c -m /etc/httpd/conf/.htpasswd Username

-c 第一次创建密码文件时使用;

-m 使用MD5算法

-D 删除一个用户;

注意:基于组的认证,不需要创建组,先创建用户;并将用户写入 /etc/httpd/conf/.htgroup 中;

格式: mygrp:username1 username2

```



13.虚拟主机配置:基于ip,基于port,基于FQDN

```

vim /etc/httpd/conf.d/vhost.conf

基于port:

Listen 8080


DocumentRoot /data/www/

ServerName www.a.com

ErrorLog logs/www.a.com-error_log

CustomLog logs/www.a.com-access_log common





DocumentRoot /data/www1/

ServerName www.b.com

ErrorLog logs/www.b.com-error_log

CustomLog logs/www.b.com-access_log common




基于FQDN:

NameVirtualHost 192.168.118.133:80 //2.2需要添加此项,2.4省略


DocumentRoot /data/www/

ServerName www.a.com

ErrorLog logs/www.a.com-error_log

CustomLog logs/www.a.com-access_log common



DocumentRoot /data/www1/

ServerName www.b.com

ErrorLog logs/www.b.com-error_log

CustomLog logs/www.b.com-access_log common




基于ip:


DocumentRoot /data/www/

ServerName www.a.com

ErrorLog logs/www.a.com-error_log

CustomLog logs/www.a.com-access_log common



DocumentRoot /data/www1/

ServerName www.b.com

ErrorLog logs/www.b.com-error_log

CustomLog logs/www.b.com-access_log common


```



- 14.开启httpd状态页面

```

1.确认status模块已经加载:

LoadModules status_module modules/mod_status.so

2.启动状态访问页面:


SetHandler server-status

Order deny,allow

Allow from 172.18.254.11 #仅允许此处指定的ip地址访问;


```



- 15.httpd运行的用户和组

``User apache``

``Group apache``

注意:如果是编译安装的httpd默认的用户和组都是daemon;



- 16.使用mod_deflate模块来压缩也买优化传输速度

```

1.确认已加载deflate模块:

# httpd -M | grep deflate

 deflate_module (shared)

2.排除不适合压缩的资源

设置输出过滤器

添加需要压缩的文件类型

3.测试:访问页面,打开F12查看调试信息,Content-Encoding gzip

SetOutputFilter DEFLATE

AddOutputFilterByType DEFLATE text/html text/plain text/css  text/xml text/javascript  application/xhtml+xml

```



配置https:

- HTTPS协议

。 Http Over SSL,TCP 443端口

。  HTTPS是二进制协议


>SSL协议会话过程:

客户端发送可供选择的加密方式,并向服务器请求证书;

服务器端发送证书以及选定的加密方式(公钥)给客户端;

客户端取得证书并进行证书验证,如果信任给其发证书的CA,则:

验证证书来源的合法性:用CA的公钥解密证书上的签名

验证证书内容合法性:完整性验证

检查证书的有效期

检查证书是否被吊销

证书中拥有者的名字,与访问目的主机要一致

客户端生产临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换

服务用此密钥加密用户请求的资源,响应给客户端

注意:SSL会话是基于IP地址所创建,所以单IP的主机上,仅可以使用一个Https虚拟主机。



配置httpd支持https,主要步骤

```

1.创建私有CA

2.在服务器创建证书签署请求

3.CA签证

4.配置Httpd支持SSL及使用的证书

5.测试基于Https访问相应的主机

```

```

#创建CA服务器:

[root@www CA]# cd /etc/pki/CA/

[root@www CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)

Generating RSA private key, 2048 bit long modulus

..........................................................................+++

...........................+++

e is 65537 (0x10001)

[root@www CA]# ll private/

total 4

-rw-------. 1 root root 1679 Nov  1 04:37 cakey.pem

[root@www CA]# openssl req -new  -x509 -key private/cakey.pem -out cacert.pem

[root@www CA]# touch serial index.txt

[root@www CA]# echo 01 > serial

##web服务器证书签署请求:

[root@www CA]# cd /etc/httpd/

[root@www httpd]# mkdir ssl

[root@www httpd]# cd ssl/

[root@www ssl]# (umask 077;openssl genrsa -out httpd.key 1024)

[root@www ssl]# openssl req -new   -key httpd.key -out httpd.csr

[root@www ssl]# ls

httpd.csr  httpd.key  //此时可以将证书签署请求发送给CA

##CA服务器签署请求:

[root@www CA]# openssl ca -in /etc/httpd/ssl/httpd.csr -out certs/httpd.crt

#将生成的证书发送给Httpd服务器

[root@www CA]# ll /etc/httpd/ssl/

-rw-r--r--. 1 root root 3866 Nov  1 04:52 httpd.crt



1.Httpd安装mod_ssl模块

yum install mod_ssl

httpd -M | grep ssl

ssl_module (shared)



2.修改/etc/httpd/conf.d/ssl.conf配置文件

 DocumentRoot "/var/www/html"

 ServerName www.magedu.com

 SSLCertificateFile /etc/httpd/ssl/httpd.crt

 SSLCertificateKeyFile /etc/httpd/ssl/httpd.key


3.重启服务,测试https是否正常访问

```



### Httpd 2.4 的新特性:

 。MPM支持运行运行DSO机制,以模块形式按需加载

 。Event MPM生产环境可用

 。异步读写机制

。 支持每模块及每目录的单独日志级别定义

 。每请求相关的专用配置

 。增强版的表达式分析式

。 毫秒级持久连接时长定义

。 基于FQDN的虚拟主机不再需要NameVirtualHost指令

 。新指令,AllowOverrideList

。 支持用户自定义变量

。  更低的内存消耗



### Httpd 2.4新模块介绍

 。mod_proxy_fcgi 支持PHP等动态语言

。 mod_proxy_scgi SCGI Protocol,支持Python

。  mod_remoteip 获取远端真实访问IP

```

1.MPM模式切换

 编辑配置文件/etc/httpd/conf.modules.d/00-mpm.conf`

2.Httpd 2.4基于IP的访问控制

   取消Allow,Deny,使用Require all granted/deny

   要将规则放在一个容器内

   基于域名的虚拟主机的实现,任何目录下的页面,只有显式授权才能被访问

   允许特定的IP访问

   Require IP IPADDR  //授权指定来源的IP访问

   Require not IP IPADDR //拒绝

   控制特定的主机访问

   Require host HOSTNAME //授权指定来源的主机访问,可以使用FQDN,也可以使用域名

   Require not HOSTNAME //拒绝


3.基于FQDN的虚拟主机不需要NameVirtualHost指令

4.毫秒级KeepAlive

KeepAlive On

KeepAliveTimeout 30ms

MaxKeepAliveRequests 20

```



### Curl和Elinks命令:

。命令行访问工具:

- curl options http://www.xxx.com

- options:

。 -A STRING 设置用户代理

。 --basic 使用basic认证

。--referer URL 指定来源网址

。  --compressed 要求返回的是压缩的格式

。  -I 只返回响应报文中的首部信息

。  --limit-rate 设置传输速度

。  -m 设置最大传输时间

。  -k 不使用证书



``elinks options http://www.xxx.com ``

- options:

 -anonymous 使用匿名账号方式


### LAMP:Linux+Apache+MySQL|Mariadb|MongoDB+PHP|Perl|Python

-  httpd:处理静态资源

- PHP:处理动态资源



。静态资源:原始形式和响应内容一致;

。动态资源:客户端请求的是程序文件,需要服务器端执行后,将执行结果返回给客户端;

 客户端技术:JavaScript

 服务器端技术:PHP,JSP



### CGI:通用网关接口;



-  安装WordPress数据库基本操作:

```

mysql基本操作:

#mysql -uroot -h127.0.0.1

mysql>grant all privileges on *.* to username@'%' identified by 'walker';

mysql>flush privileges;

mysql>create database wpdb;

mysql>show databases;

mysql>grant all privileges on wpdb.* to wpuser@'%' identified by "walker";

浏览器中安装WordPress:

http://IP/wordpress

```

- 优化httpd:2.4版本默认是打开的;2.2手动打开;

```

vim /etc/httpd/conf/httpd.conf

EnableSendfile on 开启sendfile

减少内核态切换和用户数据的开销

加快静态文件的请求速度

减少CPU和内存开销

适用于大量的小文件;

```


- php-fpm

。5.3.3之前的version 如果想使用php-fpm需要对php打补丁;#patch

。  php-fpm的工作方式:类似于apache的worker模式;


>正向代理:教室内的网络通过一个ip地址访问外网

反向代理:通过代理服务器访问后面的web服务器;






- 自定义错误页面:

`` ErrorPage``

``Sendfile机制:直接在内核中分装http首部,发送给客户端,节省资源;``

```

 减少内核态切换和用户数据的开销;

 加快静态文件的请求速度;

 减少CPU和内存开销;

 适用于大量的小文件;

```

> 开启SendFile : vim /etc/httpd/conf/httpd.conf

 EnableSendfile on  优化apache的方式之一;
上一篇下一篇

猜你喜欢

热点阅读