目录
1.LNMP 的工作流程
2.FastCGI的重要特点
3.FastCGI工作原理:
4.apache服务无法启动的原因
5.apache的默认工作模式是什么?
6.请写出 apache2.X 版本的两种工作模式,以及各自工作原理。如何查看 apache当前所 支持的模块,并且查看是工作在哪种模式下?
7.Nginx和apache的区别?
8.源码编译安装nginx时,如何启用更多的模块以及禁用不需要的模块?
9.nginx的工作原理?
10.nginx支持哪些类型的代理服务器,如何进行配置?
11.nginx如何做动静分离
12.Nginx常用的调度算法,ip hash和轮询算法有什么区别?
13.nginx限流的方法
14.nginx的upstream模块在配置文件中的核心配置是什么
15.upstream支持4种负载均衡调度算法:
16.nginx负载均衡的作用
17.nginx后端pod获取真实ip
18.logstash配置文件中都定义了哪些
19.nginx后端看到的ip默认情况是用户的物理ip还是nginx节度器的ip
20.nginx根据ip地址的访问路径将访问转发给不同的后端服务器,如何操作
21.在nginx的配置文件中,正则匹配的符号分别代表什么?
22.nginx正向代理是什么,与反向代理的区别
23.nginx负载均衡和反向代理的区别
24.nginx反向代理的优点
25.nginx是从哪个版本之后开始支持upstream模块
26.nginx 防止盗链接
27.地址重写的好处
28.nginx做反向代理一般备份哪些东西
29.nginx常用的3种调度算法:
30.如何实现nginx代理的节点访问日志记录的是真实访客的IP,不是代理的IP
31.nginx设置黑白名单的方法
32.nginx rewrite 规则中 last、break、redirect、permanent 的含义。
33.nginx如何处理一个请求
34.你对nginx做过哪些优化?
35.Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
36.讲述一下Tomcat8005、8009、8080三个端口的含义?
37.如何优化tomcat?
38.tomcat作为Web服务器,它的处理性能直接关系到用户体验,下面是几种常见的优化措施:
39.Tomcat的缺省是多少,怎么修改
40.Tomcat如何开启SSL加密,SSL默认的加密端口是多少?
41.Tomcat和Resin有什么区别,工作中你怎么选择?
42.Tomcat的每个组件的作用?
43.浅谈Tomcat 、Apache、 Nginx的区别及优缺点
44.什么是代理服务器:
45.部署一个LVS集群环境都需要什么组件
46.Lvs的几种模式区别
47.LVS处理的是什么数据?
48.LVS集群组成:
49.LVS负载均衡十种算法
50.LVS目前实现的十种调度算法:
51.四层负载均衡和七层负载均衡的区别
52.HAProxy 配置文件有哪些组成部分?
53.lvs、Haproxy与nginx的区别?
54.Keepalived通过什么判断哪台主机为主服务器,通过什么方式设置浮动IP?
55.keepalived的工作原理?
56.keepalived是主要应用在哪层
57.keepalived启动后会有几个进程?
58.keepalived的健康检查方式
59.HTTP原理
60.http请求和相应的过程
61.curl的返回的内容
62.http协议请求url共定义了哪几种方法
63.http的get和post方法有什么区别
64.HTTP常见状态码
65.curl命令如何去发一个get请求和post请求,区别是什么,删除是什么
66.请详细描述http协议原理
67.配置httpd网站服务时,快速添加新的虚拟主机
68.动态网页和静态网页的区别,基于httpd要支持PHP程序,基于Python程序具备的条件
69.基于httpd架设一个安全web站点的条件
70.什么是中间件?什么是jdk?
当 LNMP 工作的时候,首先是用户通过浏览器输入域名请求 NginxWeb服务,如果是请求的是静态的资源,则由 Nginx解析返回给用户。
如果是动态的资源,那么久通过 FastCGI接口发送给 PHP 引擎服务(FastCGI进程php-fpm)进行解析。
如果这个动态的请求要读取数据库,那么 PHP 就会继续向后请求 MySQL 数据库,读取需要的数据。最终通过 Nginx服务把获取的数据返回给用户,这就是 LNMP 的基本流程。
1.HTTP 服务器和动态脚本语言间通信的接口或工具。
2.可以把动态语言解析或 HTTP 服务器分离开。
3.Nginx、Apache、Lighttpd,以及多数动态语言都支持 FastCGI。
4.PHP 动态语言方式采用 C/S 结构,分为客户端(HTTP 服务器)和服务器端(动态语言解析服务器)。
5.PHP 动态语言服务器端可以启动多个 FastCGI的守护进程。
6.HTTP 服务器通过 FastCGI客户端和动态语言 FastCGI服务器端通信。
1)Web Server启动时载入FastCGI进程管理器
2)FastCGI进程管理器初始化,启动多个解释器
3)当客户端的请求到达Web Server时,FastCGI进程管理器选择并连接到一个解释器
4)FastCGI子进程完成处理后返回结果,将标准输出和错误信息从同一连接返回
80 端口冲突,被占用。解决办法:使用 netstat 查看当前端口的服务配置文件 httpd.conf 配置出错。解决办法:建议在修改 httpd 配置文件之前备份一个主配置文件
Apache 的工作模式有 prefork , worker 和 event 三种工作模式,早期 2.0 版本的默认工作模式prefork , 2.2 版本是 worker , 2.4 版本是 event.查看 apache 的工作模式可以使用 httpd -V 查看
prefork(多进程,每个子进程产生一个线程)和 worker(多进程多线程,每个进程生成多个 线程)
其主要工作方式是:当 Apache服务器启动后,mpm_prefork模块会预先创建多个子进程(默认为 5个),每个子进程只有一个线程,当接收到客户端的请求后,mpm_prefork模块再将请求转交给子进程处理,并且每个子进程同时只能用于处理单个请求。如果当前的请求数将超过预先创建的子进程数时,mpm_prefork模块就会创建新的子进程来处理额外的请求。Apache总是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求。这样客户端的请求就不需要在接收后等候子进程的产生。
由于在 mpm_prefork模块中,每个请求对应一个子进程,因此其占用的系统资源相对其他两种模块而言较多。不过 mpm_prefork模块的优点在于它的每个子进程都会独立处理对应的单个请求,这样,如果其中一个请求出现问题就不会影响到其他请求。Prefork在效率上要比 Worker要高,但是内存使用大得多不擅长处理高并发的场景。
Worker模式(多线程多进程):
和 prefork模式相比,worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比 prefork有更多可用的线程,表现会更优秀一些;
另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响 Apache的一部分,而不是全部。
总的来说,prefork方式速度要稍高于 worker,然而它需要的 cpu和 memory资源也稍多于
woker。可以通过命令 httpd-M 或 httpd-l可以查看 apache当前的模块可以通过命令 httpd-V 查看是工作在哪种模式下
相同点:
1)都是HTTP服务器软件
2)功能上都采用模块化结构设计
3)都支持通用的语言接口,如PHP、Perl、Python等
4)支持正向、反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输
不同点:
1)Apache处理速度很慢,占用很多内存资源
2)功能上,Apache所有模块支持动静态编译,Nginx模块都是静态编译的
3)对Fcgi的支持:Apache支持的很不好,Nginx支持非常好
4)处理连接方式:Nginx支持epoll,Apache不支持
5)空间使用上:Nginx安装包仅几百K
执行./confifigure脚本时,通过添加--with-模块名的方式启用更多模块,通过添加--without-模块名禁
用不需要的模块
ngx_http_auth_basic_module模块 实现网站的用户认证功能,包含auth_basic等配置参数
ngx_http_charset_module模块 可以自定义网页编码,包含charset utf8等配置参数
ngx_http_fastcgi_module模块 转发请求给PHP服务,包含fastcgi_pass等配置参数
ngx_http_gzip_module模块 实现网站数据压缩功能,包含gzip、gzip_type等配置参
数
ngx_http_log_module模块 记录用户请求的日志,,包含access_log等配置参数
ngx_http_rewrite_module模块 地址重新模块,包含rewrite、break、last等配置参数
ngx_http_ssl_module模块 实现HTTPS加密网站,包含ssl_certifificate、
ssl_certifificate_key等参数
ngx_http_stub_status_module模块 显示nginx服务状态,包含stub_status配置参数
ngx_http_upstream_module模块 定义集群服务器组模块,包含upstream、hash、
ip_hash等配置参数ngx_stream_core_module模块 定义4层调度(集群服务器组)模块
ngx_http_core_module模块 核心模块,包含http、server_name、root等配置参数
ngx_http_access_module模块 访问控制模块,包含allow和deny配置参数
ngx_http_proxy_module 模块 代理模块,包含proxy_pass等配置参数
ngx_http_limit_conn_module 模块 限制并发量模块,包含limit_conn等参数
proxy模块中配置过:proxy_set_header proxy_connect_timeout proxy_send_timeout
proxy_buffffer_*
当收到一个HTTP请求时,nginx作为一个代理服务器将客户端的请求映射到一个location,location
配置的每个指令会启动相应的不同的模块完成相应的工作
基于7层的HTTP代理和MAIL代理
基于4层的TCP或UDP代理
定义集群服务器模板配置:
upstream servers {
server 后端真实服务器IP:端口
server 后端真实服务器IP:端口
}
调用集群配置文件模板:
7层调度:proxy_pass http://servers;
4层调度:proxy_pass servers;
1 )安装 nginx 源码包2 )修改 nginx 配置文件,将动态请求转发到 PHP 服务商,将静态页面转发到自定义的静态页面
轮询算法、 ip hash 、权重ip_hash :同一 ip 会被分配给固定的后端服务器 , 解决 session 问题轮询:默认的算法,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
https://baijiahao.baidu.com/s?id=1634400719648980722&wfr=spider&for=pc
定义后端服务器组 servers 和 proxy_pass 模块
A) 轮询 ( 默认 ): 每个请求按时间顺序逐 - 分配到不同的后端服务器 ;B)ip_ hash: 每个请求按访问 IP 的 hash 结果分配,同 - - 个 IP 客户端固定访问一 - 个后端服务器 ;C)ur_ hash: 按访问 url 的 hash 结果来分配请求,使每个 urI 定向到同一个后端服务器 ;D)fair: 这是比 . 上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx 本身是不支持 fair 的,如果需要使用这种调度算法,必须下载 Nginx 的 upstream_ fair 模块。
将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回 应客户的请求。均衡负载能够平均分配客户请求到服务器列阵,基于此提供快速获取重要数据, 解决大量并发访问服务问题。
1 )通过添加 nginx 的 http_realip_module 模块处理包头信息2 )修改 nginx 配置文件,在 location 中添加启动模块3 )重启 nginx 服务将端口虚拟化也可以获取到真实 ip
参数 配置 默认值node.name 节点名称 主机名称path.data / 数据存储路径LOGSTASH_HOME/data/pipeline.workers 输出通道的工作 workers 数据量(提升输出效率)cpu 核数pipeline.output.workers 每个输出插件的工作 wokers 数量1pipeline.batch.size 每次 input 数量125path.confifig 过滤配置文件目录confifig.reload.automatic 自动重新加载被修改配置 falseor trueconfifig.reload.interval 配置文件检查时间path.logs 日志输出路径http.host 绑定主机地址,用户指标收集“127.0.0.1”http.port 绑定端口5000-9700log.level 日志输出级别 , 如果 confifig.debug 开启,这里一定要是 debug 日志infolog.format 日志格式plainpath.plugins 自定义插件目录
默认是节度器的 ip
在 location 字段中添加 X-Forword-For
配置文件 server 和 location 匹配:= 表示精确匹配^~ 表示 uri 以某个常规字符串开头 , 大多情况下用来匹配 url 路径, nginx 不对 url 做编码,因此请求为 /static/20%/aa ,可以被规则 ^~ /static/ /aa 匹配到(注意是空格)。~ 正则匹配 ( 区分大小写 )~* 正则匹配 ( 不区分大小写 ) !~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配 的正则/ 任何请求都会匹配匹配的优先级为:首先匹配 = ,其次匹配 ^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
https://jingyan.baidu.com/article/f54ae2fcd895b81e93b84973.html正向代理: 客户端 < 一 > 代理 一 > 服务端正向代理简单地打个租房的比方 :A( 客户端 ) 想租 C( 服务端 ) 的房子 , 但是 A( 客户端 ) 并不认识 C( 服务端 ) 租不到。B( 代理 ) 认识 C( 服务端 ) 能租这个房子所以你找了 B( 代理 ) 帮忙租到了这个房子。这个过程中 C( 服务端 ) 不认识 A( 客户端 ) 只认识 B( 代理 )C( 服务端 ) 并不知道 A( 客户端 ) 租了房子,只知道房子租给了 B( 代理 ) 。反向代理 : 客户端 一 > 代理 < 一 > 服务端反向代理也用一个租房的例子 :A( 客户端 ) 想租一个房子 ,B( 代理 ) 就把这个房子租给了他。这时候实际上 C( 服务端 ) 才是房东。B( 代理 ) 是中介把这个房子租给了 A( 客户端 ) 。 这个过程中 A( 客户端 ) 并不知道这个房子到底谁才是房东 他都有可能认为这个房子就是 B( 代理 ) 的由上的例子和图我们可以知道正向代理和反向代理的区别在于代理的对象不一样 , 正向代理的代理对象是客户端 , 反向代理的代理对象是服务端。Nginx 正向代理的配置:server {resolver 192.168.1.1; # 指定 DNS 服务器 IP 地址listen 8080;location / { proxy_pass http://request_uri; # 设定代理服务器的协议和地址}}设置 nginx 代理服务,一般是配置到一个 server 块中。注意,在该 server 块中,不要出现server_name 指令,即不要设置虚拟主机的名称和 IP 。而 resolver 是必需的,如果没有该指令,nginx 无法处理接收到的域名。其次, nginx 代理服务不支持正向代理 HTTPS 站点。
反向代理 ,是把一些静态资源存储在服务器上,当用户有请求的时候,就直接返回 反向代理 服务 器上的资源给用户,而如果 反向代理 服务器上没有的资源,就转发给后面的 负载均衡服务器 , 负 载均衡服务器 再将请求分发给后端的 web 服务器。区别就是:反向代理服务器是需要存储资源的,让用户更快速的接收到资源负载均衡就是,为了 保证后端 web 服务器的高可用,高并发,是不需要要存储资源,只需要转发用户的请求。
1 、保护了真实的 web 服务器, web 服务器对外不可见,外网只能看到反向代理服务器,而反向代 理服务器上并没有真实数据,因此,保证了 web 服务器的资源安全。2 、反向代理为基础产生了动静资源分离以及负载均衡的方式,减轻 web 服务器的负担,加速了对 网站访问速度(动静资源分离和负载均衡会以后说)3 、节约了有限的 IP 地址资源,企业内所有的网站共享一个在 internet 中注册的 IP 地址,这些服务 器分配私有地址,采用虚拟主机的方式对外提供服务;
1.9 版本
一:一般的防盗链如下location ~* \.(gif|jpg|png|swf|flv)$ {valid_referers none blocked www.jzxue.com jzxue.com ;if ($invalid_referer) {rewrite ^/ http://www.jzxue.com/retrun.html;#return 403;}}第一行: gif|jpg|png|swf|flflv表示对 gif 、 jpg 、 png 、 swf 、 flflv 后缀的文件实行防盗链第二行:表示对 www.ingnix.com 这 2 个来路进行判断if{} 里面内容的意思是,如果来路不是指定来思是,如果来路不是指定来路就跳转到 http://www.jzxue.com/retrun.html 页面,当然直接返回 403 也是可以的。二:针对图片目录防止盗链location /images/ {alias /data/images/;valid_referers none blocked server_names *.xok.la xok.la ;if ($invalid_referer) {return 403;}}三:使用第三方模块 ngx_http_accesskey_module 实现 Nginx 防盗链实现方法如下:1. 下载 NginxHttpAccessKeyModule 模块文件: http://wiki.nginx.org/File:Nginx-accesskey-2.0.3.tar.gz2. 解压此文件后,找到 nginx-accesskey-2.0.3 下的 confifig 文件。编辑此文件:替换其中的 ”$HTTP_ACCESSKEY_MODULE” 为 ”ngx_http_accesskey_module” ;3. 用一下参数重新编译 nginx :./configure --add-module=path/to/nginx-accesskey< 上面需要加上原有到编译参数,然后执行 : make && make install1. 修改 nginx 的 conf 文件,添加以下几行:location /download {accesskey on;accesskey_hashmethod md5;accesskey_arg "key";accesskey_signature "mypass$remote_addr";}其中:accesskey 为模块开关;accesskey_hashmethod 为加密方式 MD5 或者 SHA-1 ;accesskey_arg 为 url 中的关键字参数;accesskey_signature 为加密值,此处为 mypass 和访问 IP 构成的字符串。
使用 Url 重写能给您网站带来哪些好处:第一:有利于搜索引擎抓取,因为现在大部分搜索引擎对动态页面的抓取还比较弱,它们更喜欢抓取一些静态页面。而我们现在的页面大部分数据都是动态显示的。这就需要我们把动态页面变成静态页面,有利于搜索引擎抓取。第二:用户更容易理解,易于用户记忆和键入。第三:提高安全性,隐藏技术的实现,缩短 url ,隐藏实际路径,实现技术的隐藏,不至于暴露您所采用的技术。第四:可以很方便的重用,提高网站的移植性。如果我们后台方法改动的话,可以保证前台的页面部分不用改。提高了网站的移植性。使用地址重写的缺点:因为它是通过过滤器原理来实现的,就意味着又多了一道访问,多少会影响点访问速度的,这个可以忽略不计的。
配置文件、日志
轮询 ip hash 权重
轮询:upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
ip hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
权重:指定轮询几率,权重(weight)和访问比率成正比,用于后端服务器性能不均的情况
配置nginx.conf配置文件增加下同的标记内容
server{
listen 80;
server_name blog.text.com;
location / {
proxy_passhttp://test_servers;
proxy_set_header Host $host; proxy_set_headerX-Forwarded-For $remote_addr;
}
}
修改完成后,重新加载nginx即可
1. 设置目录白名单: 对指定请求路径不设置限制,如对请求路径为 api 目录下的请求不做限制,则 可写为server{location /app {proxy_pass http://192.168.1.111:8095/app;limit_conn conn 20; limit_rate 500k;limit_req zone=foo burst=5 nodelay;}location /app/api {proxy_pass http://192.168.1.111:8095/app/api}}# 因nginx会优先进行精准匹配,所以以上写法即接触了对api目录下属路径的限制2. 设置 ip 白名单,需用到 nginx geo 与 nginx map在没有人为删除的情况下( --without-http_geo_module 或 --without-http_map_module ),nginx 默认加载了 ngx-http-geo-module 和 ngx-http-map-module 相关内容;ngx-http-geo-module 可以用来创建变量,变量值依赖于客户端 ip 地址 ;ngx-http-map-module 可以基于其他变量及变量值进行变量创建,其允许分类,或者映射多个变量到不同值并存储在一个变量中;Nginx geo 格式说明Syntax ( 语法格式 ): geo [$address] $variable { ... }Default ( 默认 ): -Content ( 配置段位 ): httpNginx map 格式说明Syntax ( 语法格式 ): map String $variable { ... }Default ( 默认 ) : -Content ( 配置段位 ): http白名单配置示例http{# ... 其他配置内容# 定义白名单 ip 列表变量geo $whiteiplist {default 1 ;127.0.0.1/32 0;64.223.160.0/19 0;}# 使用 map 指令映射将白名单列表中客户端请求 ip 为空串map $whiteiplist $limit{1 $binary_remote_addr ;0 "";}# 配置请求限制内容limit_conn_zone $limit zone=conn:10m;limit_req_zone $limit zone=allips:10m rate=20r/s;server{location /yourApplicationName {proxy_pass http://192.168.1.111:8095/app;limit_conn conn 50;limit_rate 500k;limit_req zone=allips burst=5 nodelay;}}}白名单配置可用于对合作客户,搜索引擎等请求过滤限制# (特殊情况处理)# 如果想仅限制指定的请求,如:只限制 Post 请求,则:http{# 其他请求 ..# 请求地址 map 映射map $request_method $limit {default "";POST $binary_remote_addr;}# 限制定义limit_req_zone $limit zone=reqlimit:20m rate=10r/s;server{... # 与普通限制一致}}# 在此基础上,想进行指定方法的白名单限制处理,则:http{#...# 定义白名单列表map $whiteiplist $limitips{1 $binary_remote_addr;0 "";}# 基于白名单列表,定义指定方法请求限制map $request_method $limit {default "";# POST $binary_remote_addr;POST $limitips;}# 对请求进行引用limit_req_zone $limit zone=reqlimit:20m rate=10r/s;# 在 server 中进行引用server{#... 与普通限制相同}}
1.rewrite break -url重写后,直接使用当前资源,不再执行 location 里余下的语句,完成本次请求,地址栏 url 不变。2.rewrite last -url重写后,马上发起一个新的请求,再次进入 server 块,重试 location 匹配,超过 10 次匹配不到报500 错误,地址栏不变3.rewrite redirect返回 302 临时重定向,地址栏显示重定向后的 url ,,爬虫不会更新 url (临时)4.rewrite permanent返回 301 永久重定向,地址栏显示重定向后的 url ,爬虫更新 url
nginx 作为服务端处理请求连接首先, nginx 在启动时,会解析配置文件,得到需要监听的端口与 ip 地址,然后在 nginx 的 master进程里面,先初始化好这个监控的 socket( 创建 socket ,设置 addrreuse 等选项,绑定到指定的 ip地址端口,再 listen) ,然后再 fork( 一个现有进程可以调用 fork 函数创建一个新进程。由 fork 创建 的新进程被称为子进程 ) 出多个子进程出来,然后子进程会竞争 accept 新的连接。此时,客户端就 可以向 nginx 发起连接了。当客户端与 nginx 进行三次握手,与 nginx 建立好一个连接后,此时,某 一个子进程会 accept 成功,得到这个建立好的连接的 socket ,然后创建 nginx 对连接的封装,即 ngx_connection_t 结构体。接着,设置读写事件处理函数并添加读写事件来与客户端进行数据的交换。最后, nginx 或客户端来主动关掉连接Nginx 作为客户端处理请求连接nginx 也是可以作为客户端来请求其它 server 的数据的(如 upstream 模块),此时,与其它server 创建的连接,也封装在 ngx_connection_t 中。作为客户端, nginx 先获取一个ngx_connection_t 结构体,然后创建 socket ,并设置 socket 的属性(比如非阻塞)。然后再通过 添加读写事件,调用 connect/read/write 来调用连接,最后关掉连接,并释放 ngx_connection_t
优化404报错页面
Nginx的服务状态信息
优化并发量(修改内核参数ulimit -Hn/Sn vim /etc/security/limits.conf,压力并发测试 ab -n -c)
优化数据包头缓存
优化浏览器本地缓存静态数据
优化nginx服务的安全配置:
删除不需要的模块
修改版本信息限制并发量(降低DOS风险)
拒绝非法的请求
防止buffffer溢出(防止客户端请求数据溢出,降低DOS风险)
添加黑白名单(在配置文件中server处定义)
cookie过滤,URL过滤
Squid、Varinsh和Nginx都是代理服务器
什么是代理服务器:
能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资 源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你,如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网
区别:
1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业但是本身不支持特性挺多,只 能缓存静态文件
2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成
3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术
在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的
4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境
工作中选择:要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。
8005==》 关闭时使用
8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口
8080==》 一般应用使用
隐藏版本号
降权启动
删除测试页面
1)去掉对web.xml的监视,把jsp提前编辑成Servlet。有富余物理内存的情况,加大tomcat使用的jvm的内存2)服务器资源服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。
(1) 对于高并发情况下会有大量的运算,那么CPU的速度会直接影响到处理速度。
(2) 内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用-Xmx -Xms -
XX:MaxPermSize等参数对内存不同功能块进行划分。我们之前就遇到过内存分配不足,导致虚拟机一直处于full GC,从而导致处理能力严重下降。
(3) 硬盘主要问题就是读写性能,当大量文件进行读写时,磁盘极容易成为性能瓶颈。最好的办
法还是利用下面提到的缓存。3)利用缓存和压缩
对于静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采用了Nginx作为
缓存服务器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。
另外,为了能加快网络传输速度,开启gzip压缩也是必不可少的。但考虑到tomcat已经需要
处理很多东西了,所以把这个压缩的工作就交给前端的Nginx来完成。
除了文本可以用gzip压缩,其实很多图片也可以用图像处理工具预先进行压缩,找到一个平
衡点可以让画质损失很小而文件可以减小很多。曾经我就见过一个图片从300多kb压缩到几十kb,自己几乎看不出来区别。
4)采用集群
单个服务器性能总是有限的,最好的办法自然是实现横向扩展,那么组建tomcat集群是有效
提升性能的手段。我们还是采用了Nginx来作为请求分流的服务器,后端多个tomcat共享session来协同工作
5)优化tomcat参数
这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,主要是优化连接配置,关
闭客户端dns查询。
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="20"
acceptCount="100"
disableUploadTimeout="true"
enableLookups="false"
URIEncoding="UTF-8" />
Tomcat的缺省端口号是8080.
修改Tomcat端口号:
1)找到Tomcat目录下的conf文件夹
2)进入conf文件夹里面找到server.xml文件
3)打开server.xml文件
4)在server.xml文件里面找到下列信息
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” />
5)把port=”8080″改成port=”8888″,并且保存
6)启动Tomcat,并且在IE浏览器里面的地址栏输入http://127.0.0.1:8888/
7)tomcat默认采用的BIO模型,在几百并发下性能会有很严重的下降。tomcat自带还有NIO的模型,另外也可以调用APR的库来实现操作系统级别控制。
NIO模型是内置的,调用很方便,只需要将上面配置文件中protocol修改成
org.apache.coyote.http11.Http11NioProtocol,重启即可生效。如下面的参数配置,默认的是
HTTP/1.1。
connectionTimeout="20000″ redirectPort="8443″ maxThreads="500″
minSpareThreads="20″ acceptCount="100″ disableUploadTimeout="true"
enableLookups="false" URIEncoding="UTF-8″ />
开启一个独立的Connector,设置端口,并在配置中调用非对称秘钥文件
默认的SSL端口为443端口,Tomcat配置文件中的默认设置为8443端口
区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少
最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些
但稳定性和java程序的兼容性,应该是比resin的要好
工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程 序的兼容
1)Server:整个Servlet容器组合,可以包含一个或多个Server元素在最顶层,代表整个Tomcat 容器,因此它必须是server.xml中唯一一个最外层的元素。一个Server元素中可以有一个或多个Service元素。
2)service:它由一个或者多个Connector组成,以及一个Engine,负责处理所有Connector所获得的客户请求。
3)Connector:客户端与程序交互组件,负责接收请求以及向客户端返回响应。Service的端口就是由它来监听
4)Engine:处理连接器接收到请求,Engine组件在Service组件中有且只有一个;Engine是
Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。
5)Host:虚拟主机(是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。)
6.)Context一个Context对应一个Web Application
Ps: Engine、Host和Context都是容器,但它们不是平行的关系,而是父子关系:Engine包含
Host,Host包含Context。
1) Apache
Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。Apache支持支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。
Apche可以支持PHPcgiperl,但是要使用Java的话,你需要Tomcat在Apache后台支撑,将Java请求由Apache转发给Tomcat处理。)
缺点:配置相对复杂,自身不支持动态页面。
2) Tomcat:
Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是
Apache的扩展,但是可以独立于Apache运行。
3) Nginx
Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。
区别
1) Apache与Tomcat的比较
相同点:
两者都是Apache组织开发的两者都有HTTP服务的功能两者都是免费的
不同点:
Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器.
Apache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页如
(ASP,PHP,CGI,JSP)等动态网页的就不行。如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat。
Apache:侧重于HTTPServer ,Tomcat:侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想;
Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。
实际使用中Apache与Tomcat常常是整合使用:
如果客户端请求的是静态页面,则只需要Apache服务器响应请求。
如果客户端请求动态页面,则是Tomcat服务器响应请求。
因为JSP是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销。
可以理解Tomcat为Apache的一种扩展。
2)Nginx与Apache比较
nginx相对于apache的优点
轻量级,同样起web 服务,比apache占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能高度模块化的设计,编写模块相对简单提供负载均衡
社区活跃,各种高性能模块出品迅速
apache 相对于nginx 的优点
apache的 rewrite 比nginx 的强大 ;
支持动态页面;
支持的模块多,基本涵盖所有应用;
性能稳定,而nginx相对bug较多。
两者优缺点比较
Nginx 配置简洁, Apache 复杂 ;
Nginx 静态处理性能比 Apache 高 3倍以上 ;Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用;
Apache 的组件比 Nginx 多 ;
apache是同步多进程模型,一个连接对应一个进程;
nginx是异步的,多个连接(万级别)可以对应一个进程;
nginx处理静态文件好,耗费内存少;
动态请求由apache去做
nginx只适合静态和反向;
Nginx适合做前端服务器,负载性能很好;
Nginx本身就是一个反向代理服务器 ,且支持负载均衡
总结
1)Nginx优点:负载均衡、反向代理、处理静态文件优势。nginx处理静态请求的速度高于
apache;
2)Apache优点:相对于Tomcat服务器来说处理静态文件是它的优势,速度快。Apache是静态解
析,适合静态HTML、图片等。
3)Tomcat:动态解析容器,处理动态请求,是编译JSP\Servlet的容器,Nginx有动态分离机制,静态请求直接就可以通过Nginx处理,动态请求才转发请求到后台交由Tomcat进行处理。
Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache较适合。
日常工作中,一般的项目还是用nginx+tomcat来做会多一点。
能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资 源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接 收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复 你,如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网
director server:调度服务器,将负载分发到real server的服务器,该主机需要安装ipvsadm,创建虚拟机集群并添加real server
real server:真实服务器,真正提供应用,服务的服务器,该主机需要部署LNMP或者LAMP,做DR模式的集群还需要设置VIP和防止ARP冲突
可以结合keepalived软件实现主备LVS调度器
VIP:虚拟IP地址,公布给用户访问的虚拟IP地址
RIP:真实IP地址,集群节点上使用的IP地址
DIP:调度器连接节点服务器的IP地址
模式:LVS/NAT模式 LVS/DR模式 LVS/TUN模式 LVS:fullnat模式
LVS/NAT模式:
原理:
客户端将访问vip报文发送给LVS服务器
LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),发送给后端的真实服务器;
后端服务器在处理完之后将响应的报文返回给客户端,但却不在同一网段
LVS根据自己的追踪技术将后端真实服务响应客户端的报文源地址改为自己的IP地址(SNAT),发送给客户端
优缺点:
安全,可以实现不同网段的数据请求,但请求和相应报文都需要通过负载均衡调度器,当服务器节点 数目升到20时,调度器本身就可能成为系统的瓶颈
LVS/DR模式:
原理:
客户端将访问的vip报文发送给LVS服务器
LVS服务器将请求报文的mac地址改为后端真实服务器的mac地址
后端真实服务器得到访问报文后进行IP查看,再确认自己有vip之后进行请求处理;
后端真实服务器在处理完数据请求后,直接响应客户端
优缺点:
LVS服务器只是修改了mac地址,所以非常快速,并且LVS不会成为瓶颈
但配置的要求比较高,LVS服务器必须和真实服务器处于同一vlan中后端真实服务器直接响应客户端,对于后端真实服务器本身来说并不安全
LVS/TUN模式:
原理:
客户端将访问vip报文发送给LVS服务器
LVS服务器将请求报文重新封装,发送给后端真实服务器
后端真实服务器将请求报文解封,在确认自身有vip之后进行请求处理
后端真实服务器在处理完数据请求之后,直接响应客户端
优缺点:
快速,但不安全,不能抵挡DOS攻击,跨地区回答之网络延迟很大访问效率速度更低
LVS-fullnat模式:
原理:
客户端将访问vip报文发送给LVS服务器
LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),发送给客户端
后端服务器在处理完之后要将响应的报文返回给LVS
LVS将返回的数据包源地址改为自己(SNAT),目的地址改为客户端(DNAT),发送给客户端
fullnat模式与nat模式相似但nat模式只做两次地址转换,fullnat却做了四次
Lvs大多处理的是数据库的数据
前端:负载均衡层
由一台或者多台负载均衡调度器构成
中间:服务器群组层
由一组实际运行应用服务的服务器组成
底端:数据共享存储层
提供共享存储空间的存储区域
调度算法:总共十种,常用四种
轮询:将客户端请求平均分法给所有的real server
加权轮询:根据real server 权重进行轮询调度
最少连接:选择连接数最少的服务器
加权最少连接:根据real server权重值,选择连接数最少的
(1). 轮循调度 rr
均等地对待每一台服务器,不管服务器上的实际连接数和系统负载
(2). 加权轮调 wrr
调度器可以自动问询真实服务器的负载情况,并动态调整权值
(3). 最少链接 lc
动态地将网络请求调度到已建立的连接数最少的服务器上如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡
(4). 加权最少链接 wlc
调度器可以自动问询真实服务器的负载情况,并动态调整权值带权重的谁不干活就给谁分配,机器配置好的权重高
(5). 基于局部性的最少连接调度算法 lblc
这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
(6). 复杂的基于局部性最少的连接算法 lblcr
记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。
(7). 目标地址散列调度算法 dh
该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
(8). 源地址散列调度算法 sh
与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
(9). 最少期望延迟 sed
不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙
(10). 永不排队 nq
无需队列,如果有realserver的连接数为0就直接分配过去
1)轮询算法
2)加权轮询算法
3)最少连接算法
4)加权最少连接
5)源地址散列
6)目标地址散列
7)最少的队列调度
8)最短的期望的延迟
9)基于局部性的最少连接
10)带复制的基于局部性的最少连接
1.四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡
2.四层负载均衡,就是根据请求的ip+端口,根据设定的规则,将请求转发到后端对应的IP+端口上。七层负载均衡,则是在四层基础上,再去考虑应用层的特征。比如说一个WEB服务器的负载均衡,除了根据IP+80端口来判断之外,还可以根据七层URL,浏览器类别,来决定如何去转发流量。
3.四层交换机主要分析IP层和TCP/UDP层,实现四层流量负载,这种负载不关心七层的应用协议。七层的交换机除了支持四层之外,还要分析应用层,如HTTP协议、URL、cookie等信息。四层常见软件是haproxy,LVS,七层常见软件是nginx。
4.简单来说,七层负载均衡走流量,四层负载均衡是不走流量的,效率会更高
5.四层提供终端到终端的连接
6.四层不能修改后端请求的资源类型
default:为后续的其他部分设置缺省参数,缺省参数可以被后续部分重置;
frontend:描述集群接收客户端请求的信息集合;
backend:描述转发链接的后端服务器集合;
listen:把 frontend 和 backend 结合到一起的完整声明。
lvs工作在4层,消耗内存资源低,抗负载能力较强,没有流量产生,配置简单,工作稳定,应用较广,但lvs 软件本身不支持正则表达式处理,不能做动静分离,不支持健康检查
Haproxy基于四层和七层的转发,是专业的代理服务器,支持虚拟主机,支持Session和Cookie的功能, 效率.负载均衡速度比nginx高但低于lvs,支持TCP协议的负载均衡转发,负载均衡的策略较多,有8种策略,支持url检查,健康检查等
nginx基于七层的转发,当开启upstream模块支持四层转发,支持并发量大,正则表达式比Haproxy强大,但监控检查只支持通过端口,无法使用url检查
Haproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做,在很大并发量的时候选 择lvs,中小型企业并发量不大可以做nginx或者Haproxy,由于Haproxy配置比较简单,所以中小企业 更推荐使用Haproxy
keepalived首先做初始化检查state状态,master为主服务器,backup为备用服务器,然后再对比所有 服务器的priority,谁的优先级高谁就是最终的主服务器
优先级高的服务器会通过IP命令为自己的电脑配置一个提前定义好的浮动IP地址
利用vrrp的原理进行工作,提供高可用集群服务,keepalived根据优先级选出master主机和slave主 机,当服务器节点异常或出现故障时,keepalived回将故障节点从集群系统中自动剔除,故障节点恢 复之后,keepalived再将器加入到集群系统中,所有工作无需人工干预
Keepalived是基于VRRP协议的实现,主要用在IP层、TCP层和应用层。
1:IP层:Keepalived会定期向服务器群中的服务器发送一个数据包(既Ping),如果发现IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除。
2:TCP层:类似IP层,只不过这里是检测服务的端口
3:应用层:Keepalived将根据用户的设定来检查服务程序的运行是否正常
keepalived正常启动的时候,共启动3个进程,一个是父进程,负责监控其子进度程,一个是vrrp子进程,另外一个是checkers子进程两个子问进程都被系统watchlog看管,两个子进程各自负责复杂自己的事。Healthcheck子进程答检查各自服务器的健康状况版,,例如http,lvs。如果healthchecks进程检查到master上服务不可用了,就会通知权本机上的vrrp子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态。
1)keepalived对后端realserver的健康检查方式主要有以下几种
TCP_CHECK:工作在第4层,keepalived向后端服务器发起一个tcp连接请求,如果后端服务器没有响应或超时,那么这个后端将从服务器池中移除。
HTTP_GET:工作在第5层,向指定的URL执行http请求,将得到的结果用md5加密并与指定的md5值比较看是否匹配,不匹配则从服务器池中移除;此外还可以指定http返回码来判断检测是否成功。HTTP_GET可以指定多个URL用于检测,这个一台服务器有多个虚拟主机的情况下比较好用。
SSL_GET:跟上面的HTTP_GET相似,不同的只是用SSL连接
MISC_CHECK:用脚本来检测,脚本如果带有参数,需将脚本和参数放入双引号内。脚本的返回值需为:
0) 检测成功
1) 检测失败,将从服务器池中移除
2-255)检测成功;如果有设置misc_dynamic,权重自动调整为 退出码-2,如退出码为
200,权重自动调整为198=200-2。SMTP_CHECK:用来检测邮件服务的smtp的
2)相关配置:
delay_loop 隔多长时间做一次健康检测,单位为秒connect_timeout 连接超时时间,单位为秒nb_get_retry 检测失败后的重试次数,如果达到重试次数仍然失败,将后端从服务器池中移除。delay_before_retry 失败重试的间隔时间,单位为秒
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。
客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成干上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。HTTP是一种面向对象的协议。允许传送任意类型的数据对象。
它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。当用户在一个HTML文档中定义了一个超文本链后,浏览器将通过TCP/IP协议与指定的服务器建立连接
1)域名解析
首先,浏览器会对URL地址进行解析,解析的过程如下:
①浏览器缓存:首先在浏览器的DNS缓存中查找域名对应的ip地址;
②系统缓存:如果浏览器没有找到需要的域名,则浏览器会进行一个系统调用,在用户主机的DNS中进行查找;
③路由器缓存:如果用户主机中没有找到需要的ip地址,会向路由器发送请求,在路由器的DNS中查找
④ISP缓存:如果以上所有的DNS中都没有找到,则会在ISP(互联网服务供应商)的DNS缓存中查找,一般在这里都能找到,如果没有则说明用户输入的域名有误
2)浏览器与文本服务器建立TCP/UDP连接http是建立在传输层的TCP/UDP连接的基础之上的
3)浏览器给web服务器发送一个http请求
一旦传输层的连接建立成功,浏览器就可以发送请求了,请求的内容包括请求行、响应头部、空行、响应数据
4)服务器给浏览器进行响应
当请求发送后,服务器回给浏览器返回需要的信息,返回的信息主要包括状态行、响应头部、空行、请求数据等
5)释放连接
http1.0:非持久连接,即氢气响应后立即断开
http1.1:持久连接,响应成功后仍然在短时间内保持这条连接
6)浏览器解析响应数据
浏览器解析响应数据后,数据会呈现在浏览器中
返回状态码、时间日期、服务版本号、系统、协议的头部信息、请求方式、网页内容的格式、请求变量的实体标签值(类似于hash值)、字符编码、文本格式
HTTP请求的方法:
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的
操作方式
1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
注意:
1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应
当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。
2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。
区别:
get请求无消息体,只能携带少量数据
post请求有消息体,可以携带大量数据
携带数据的方式:
get请求将数据放在url地址中
post请求将数据放在消息体中
GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
GET方式提交的数据最多只能有1024字节,而POST则没有此限制
状态码 功能描述
200 一切正常
301 永久重定向302 临时重定向
401 用户名或密码错误
403 禁止访问(客户端IP地址被拒绝)
404 文件不存在
414 请求URI头部过长
500 服务器内部错误
502 Bad Gateway
Get请求
curl命令 + 请求接口的地址使用curl命令:
curl “http://www.baidu.com” 如果这里的URL指向的是一个文件或者一幅图都可以直接下载
到本地
curl -i “http://www.baidu.com” 显示全部信息
curl -l “http://www.baidu.com” 只显示头部信息
curl -v “http://www.baidu.com” 显示get请求全过程解析
Post请求
使用curl命令(通过-d参数,把访问参数放在里面):
curl -d “param1=value1&pagesize=2” “http://www.baidu.com”
如果传第二个参数就使用post请求的方式,可以设置超时时间,避免程序卡死
删除请求是delete
curl delete http://www.baidu.com
http协议:是客户端与服务端之间通信传输数据的基础,HTTP协议是基于TCP/IP协议之上的协议
原理包括四个过程:
连接:浏览器与服务器建立连接,打开一个socket的虚拟文件,表明连接建立成功
请求:浏览器通过socket向服务器提交请求(一般是GET或POST请示命令)
应答:浏览器请求提交后,通过HTTP协议传送给服务器,服务器收到后进行处理将结果又通过
HTTP回传给客户端,从而在客户端显示出所请求的页面
关闭连接:当应答结束后,浏览器与服务器之间就断开连接
1)为每一个虚拟主机建立一份独立的配置文件,放到/etc/httpd/conf.d目录下,配置文件名称以.conf 结尾
2)配置
.. .. 区段标记,其中使用语句ServerName指定站点名称,使用DocumentRoot指定网页目录3)重起httpd服务
静态网页:浏览器访问到的网页就是服务端提供的文件
动态网页:浏览器访问到的网页文件时服务端指定的程序动态生成的网页文件
支持PHP的程序:安装httpd、php软件包
支持Python程序:安装httpd、mod_wsgi软件包,并在配置站点时添加程序调用别名
(WSGIScriptAlias)
安装mod_ssl模块软件包
提供可用的网站证书、密钥部署到正确的位置
修改/etc/httpd/conf.d/ssl.conf配置文件,指定站点名、网页目录、证书以及密钥的路径
中间件介绍:
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯
是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口
但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递,通过中间件,应用程序可以工作于多平台或OS环境。
jdk:jdk是Java的开发工具包,它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境