Web运维面试题
目錄
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?
1.LNMP 的工作流程
當 LNMP 工作的時候,首先是用戶通過瀏覽器輸入域名請求 NginxWeb服務,如果是請求的是靜態的資源,則由 Nginx解析返回給用戶。
如果是動態的資源,那么久通過 FastCGI接口發送給 PHP 引擎服務(FastCGI進程php-fpm)進行解析。
如果這個動態的請求要讀取數據庫,那么 PHP 就會繼續向后請求 MySQL 數據庫,讀取需要的數據。最終通過 Nginx服務把獲取的數據返回給用戶,這就是 LNMP 的基本流程。
2.FastCGI的重要特點
1.HTTP 服務器和動態腳本語言間通信的接口或工具。
2.可以把動態語言解析或 HTTP 服務器分離開。
3.Nginx、Apache、Lighttpd,以及多數動態語言都支持 FastCGI。
4.PHP 動態語言方式采用 C/S 結構,分為客戶端(HTTP 服務器)和服務器端(動態語言解析服務器)。
5.PHP 動態語言服務器端可以啟動多個 FastCGI的守護進程。
6.HTTP 服務器通過 FastCGI客戶端和動態語言 FastCGI服務器端通信。
3.FastCGI工作原理:
1)Web Server啟動時載入FastCGI進程管理器
2)FastCGI進程管理器初始化,啟動多個解釋器
3)當客戶端的請求到達Web Server時,FastCGI進程管理器選擇并連接到一個解釋器
4)FastCGI子進程完成處理后返回結果,將標準輸出和錯誤信息從同一連接返回
4.apache服務無法啟動的原因
80端口沖突,被占用。解決辦法:使用netstat查看當前端口的服務 配置文件httpd.conf配置出錯。解決辦法:建議在修改httpd配置文件之前備份一個主配置文件5.apache的默認工作模式是什么?
Apache的工作模式有prefork,worker和event三種工作模式,早期2.0版本的默認工作模式 prefork,2.2版本是worker,2.4版本是event. 查看apache的工作模式可以使用httpd -V查看6.請寫出 apache2.X 版本的兩種工作模式,以及各自工作原理。如何查看 apache當前所 支持的模塊,并且查看是工作在哪種模式下?
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 查看是工作在哪種模式下
7.Nginx和apache的區別?
相同點:
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
8.源碼編譯安裝nginx時,如何啟用更多的模塊以及禁用不需要的模塊?
執行./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_*
9.nginx的工作原理??
當收到一個HTTP請求時,nginx作為一個代理服務器將客戶端的請求映射到一個location,location
配置的每個指令會啟動相應的不同的模塊完成相應的工作
10.nginx支持哪些類型的代理服務器,如何進行配置?
基于7層的HTTP代理和MAIL代理
基于4層的TCP或UDP代理
定義集群服務器模板配置:
upstream servers {
server 后端真實服務器IP:端口
server 后端真實服務器IP:端口
}
調用集群配置文件模板:
7層調度:proxy_pass http://servers;
4層調度:proxy_pass servers;
11.nginx如何做動靜分離
1)安裝nginx源碼包 2)修改nginx配置文件,將動態請求轉發到PHP服務商,將靜態頁面轉發到自定義的靜態頁面12.Nginx常用的調度算法,ip hash和輪詢算法有什么區別?
輪詢算法、ip hash 、權重 ip_hash:同一ip會被分配給固定的后端服務器,解決session問題 輪詢:默認的算法,每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。13.nginx限流的方法
https://baijiahao.baidu.com/s?id=1634400719648980722&wfr=spider&for=pc
14.nginx的upstream模塊在配置文件中的核心配置是什么
定義后端服務器組servers和proxy_pass模塊15.upstream支持4種負載均衡調度算法:
A)輪詢(默認):每個請求按時間順序逐-分配到不同的后端服務器; B)ip_ hash:每個請求按訪問IP的hash結果分配,同- -個IP客戶端固定訪問一-個后端服務器; C)ur_ hash:按訪問url的hash結果來分配請求,使每個urI定向到同一個后端服務器; D)fair:這是比.上面兩個更加智能的負載均衡算法。此種算法可以依據頁面大小和加載時間長短智能地進行負載均衡,也就是根據后端服務器的響應時間來分配請求,響應時間短的優先分配。 Nginx本身是不支持fair的,如果需要使用這種調度算法,必須下載Nginx的upstream_ fair模 塊。16.nginx負載均衡的作用
將外部發送來的請求均勻分配到對稱結構中的某一臺服務器上,而接收到請求的服務器獨立地回應客戶的請求。均衡負載能夠平均分配客戶請求到服務器列陣,基于此提供快速獲取重要數據,解決大量并發訪問服務問題。17.nginx后端pod獲取真實ip
1)通過添加nginx的http_realip_module模塊處理包頭信息 2)修改nginx配置文件,在location中添加啟動模塊 3)重啟nginx服務 將端口虛擬化也可以獲取到真實ip18.logstash配置文件中都定義了哪些
參數 配置 默 認值 node.name 節點名稱 主 機名稱 path.data /數據存儲路徑 LOGSTASH_HOME/data/ pipeline.workers 輸出通道的工作workers數據量(提升輸出效率) cpu核數 pipeline.output.workers 每個輸出插件的工作wokers數量 1 pipeline.batch.size 每次input數量 125 path.confifig 過濾配置文件目錄 confifig.reload.automatic 自動重新加載被修改配置 false or true confifig.reload.interval 配置文件檢查時間 path.logs 日志輸出路徑 http.host 綁定主機地址,用戶指標收集 “127.0.0.1” http.port 綁定端口 5000-9700 log.level 日志輸出級別,如果confifig.debug開啟,這里一定要是debug日志 info log.format 日志格式 plain path.plugins 自定義插件目錄19.nginx后端看到的ip默認情況是用戶的物理ip還是nginx節度器的ip
默認是節度器的ip20.nginx根據ip地址的訪問路徑將訪問轉發給不同的后端服務器,如何操作
在location字段中添加X-Forword-For21.在nginx的配置文件中,正則匹配的符號分別代表什么?
配置文件server和 location匹配: = 表示精確匹配 ^~ 表示uri以某個常規字符串開頭,大多情況下用來匹配url路徑,nginx不對url做編碼,因此請求為/static/20%/aa,可以被規則^~ /static/ /aa匹配到(注意是空格)。 ~ 正則匹配(區分大小寫) ~* 正則匹配(不區分大小寫)!~和!~* 分別為區分大小寫不匹配及不區分大小寫不匹配 的正則 / 任何請求都會匹配 匹配的優先級為: 首先匹配 =,其次匹配^~, 其次是按文件中順序的正則匹配,最后是交給 / 通用匹配。當有匹配成功時候,停止匹配,按當前匹配規則處理請求。22.nginx正向代理是什么,與反向代理的區別
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站點。23.nginx負載均衡和反向代理的區別
反向代理,是把一些靜態資源存儲在服務器上,當用戶有請求的時候,就直接返回反向代理服務器上的資源給用戶,而如果反向代理服務器上沒有的資源,就轉發給后面的負載均衡服務器,負載均衡服務器再將請求分發給后端的web服務器。 區別就是:反向代理服務器是需要存儲資源的,讓用戶更快速的接收到資源負載均衡就是,為了保證后端web服務器的高可用,高并發,是不需要要存儲資源,只需要轉發用戶的請求。24.nginx反向代理的優點
1、保護了真實的web服務器,web服務器對外不可見,外網只能看到反向代理服務器,而反向代理服務器上并沒有真實數據,因此,保證了web服務器的資源安全。 2、反向代理為基礎產生了動靜資源分離以及負載均衡的方式,減輕web服務器的負擔,加速了對網站訪問速度(動靜資源分離和負載均衡會以后說) 3、節約了有限的IP地址資源,企業內所有的網站共享一個在internet中注冊的IP地址,這些服務器分配私有地址,采用虛擬主機的方式對外提供服務;25.nginx是從哪個版本之后開始支持upstream模塊
1.9版本26.nginx 防止盜鏈接
一:一般的防盜鏈如下 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.jz xue.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.gz 2. 解壓此文件后,找到nginx-accesskey-2.0.3下的confifig文件。編輯此文件:替換其中的” $HTTP_ACCESSKEY_MODULE”為”ngx_http_accesskey_module”; 3. 用一下參數重新編譯nginx: ./configure --add-module=path/to/nginx-accesskey <<pestd add 上面需要加上原有到編譯參數,然后執行: make && make install 1. 修改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構成的字符串。27.地址重寫的好處
使用Url重寫能給您網站帶來哪些好處: 第一:有利于搜索引擎抓取,因為現在大部分搜索引擎對動態頁面的抓取還比較弱,它們更喜歡 抓取一些靜態頁面。而我們現在的頁面大部分數據都是動態顯示的。這就需要我們把動態頁面變 成靜態頁面,有利于搜索引擎抓取。 第二:用戶更容易理解,易于用戶記憶和鍵入。 第三:提高安全性,隱藏技術的實現,縮短url,隱藏實際路徑,實現技術的隱藏,不至于暴露您 所采用的技術。 第四:可以很方便的重用,提高網站的移植性。如果我們后臺方法改動的話,可以保證前臺的頁 面部分不用改。提高了網站的移植性。 使用地址重寫的缺點: 因為它是通過過濾器原理來實現的,就意味著又多了一道訪問,多少會影響點訪問速度的,這個 可以忽略不計的。28.nginx做反向代理一般備份哪些東西
配置文件、日志29.nginx常用的3種調度算法:
輪詢 ip hash 權重
輪詢:upstream按照輪詢(默認)方式進行負載,每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除
ip hash:每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題
權重:指定輪詢幾率,權重(weight)和訪問比率成正比,用于后端服務器性能不均的情況
30.如何實現nginx代理的節點訪問日志記錄的是真實訪客的IP,不是代理的IP
配置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即可
31.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 ( 配置段位 ): http Nginx 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{ #... 與普通限制相同 } }32.nginx rewrite 規則中 last、break、redirect、permanent 的含義。
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,爬蟲更新url33.nginx如何處理一個請求
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_t34.你對nginx做過哪些優化?
優化404報錯頁面
Nginx的服務狀態信息
優化并發量(修改內核參數ulimit -Hn/Sn vim /etc/security/limits.conf,壓力并發測試 ab -n -c)
優化數據包頭緩存
優化瀏覽器本地緩存靜態數據
優化nginx服務的安全配置:
刪除不需要的模塊
修改版本信息限制并發量(降低DOS風險)
拒絕非法的請求
防止buffffer溢出(防止客戶端請求數據溢出,降低DOS風險)
添加黑白名單(在配置文件中server處定義)
cookie過濾,URL過濾
35.Squid、Varinsh和Nginx有什么區別,工作中你怎么選擇?
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。
36.講述一下Tomcat8005、8009、8080三個端口的含義?
8005==》 關閉時使用
8009==》 為AJP端口,即容器使用,如Apache能通過AJP協議訪問Tomcat的8009端口
8080==》 一般應用使用
37.如何優化tomcat?
隱藏版本號
降權啟動
刪除測試頁面
38.tomcat作為Web服務器,它的處理性能直接關系到用戶體驗,下面是幾種常見的優化措施:
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查詢。
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="20"
acceptCount="100"
disableUploadTimeout="true"
enableLookups="false"
URIEncoding="UTF-8" />
39.Tomcat的缺省是多少,怎么修改
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。
<Connector port="8080″? protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000″? redirectPort="8443″ maxThreads="500″
minSpareThreads="20″ acceptCount="100″ disableUploadTimeout="true"
enableLookups="false"? URIEncoding="UTF-8″ />
40.Tomcat如何開啟SSL加密,SSL默認的加密端口是多少?
開啟一個獨立的Connector,設置端口,并在配置中調用非對稱秘鑰文件
默認的SSL端口為443端口,Tomcat配置文件中的默認設置為8443端口
41.Tomcat和Resin有什么區別,工作中你怎么選擇?
區別:Tomcat用戶數多,可參考文檔多,Resin用戶數少,可考慮文檔少
最主要區別則是Tomcat是標準的java容器,不過性能方面比resin的要差一些
但穩定性和java程序的兼容性,應該是比resin的要好
工作中選擇:現在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求穩定和程 序的兼容
42.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。
43.淺談Tomcat 、Apache、 Nginx的區別及優缺點
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來做會多一點。
44.什么是代理服務器:
能當替用戶去訪問公網,并且能把訪問到的數據緩存到服務器本地,等用戶下次再訪問相同的資 源的時候,代理服務器直接從本地回應給用戶,當本地沒有的時候,我代替你去訪問公網,我接 收你的請求,我先在我自已的本地緩存找,如果我本地緩存有,我直接從我本地的緩存里回復 你,如果我在我本地沒有找到你要訪問的緩存的數據,那么代理服務器就會代替你去訪問公網
45.部署一個LVS集群環境都需要什么組件
director server:調度服務器,將負載分發到real server的服務器,該主機需要安裝ipvsadm,創建虛擬機集群并添加real server
real server:真實服務器,真正提供應用,服務的服務器,該主機需要部署LNMP或者LAMP,做DR模式的集群還需要設置VIP和防止ARP沖突
可以結合keepalived軟件實現主備LVS調度器
VIP:虛擬IP地址,公布給用戶訪問的虛擬IP地址
RIP:真實IP地址,集群節點上使用的IP地址
DIP:調度器連接節點服務器的IP地址
46.Lvs的幾種模式區別
模式: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卻做了四次
47.LVS處理的是什么數據?
Lvs大多處理的是數據庫的數據
48.LVS集群組成:
前端:負載均衡層
由一臺或者多臺負載均衡調度器構成
中間:服務器群組層
由一組實際運行應用服務的服務器組成
底端:數據共享存儲層
提供共享存儲空間的存儲區域
調度算法:總共十種,常用四種
輪詢:將客戶端請求平均分法給所有的real server
加權輪詢:根據real server 權重進行輪詢調度
最少連接:選擇連接數最少的服務器
加權最少連接:根據real server權重值,選擇連接數最少的
49.LVS負載均衡十種算法
(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就直接分配過去
50.LVS目前實現的十種調度算法:
1)輪詢算法
2)加權輪詢算法
3)最少連接算法
4)加權最少連接
5)源地址散列
6)目標地址散列
7)最少的隊列調度
8)最短的期望的延遲
9)基于局部性的最少連接
10)帶復制的基于局部性的最少連接
51.四層負載均衡和七層負載均衡的區別
1.四層就是基于IP+端口的負載均衡;七層就是基于URL等應用層信息的負載均衡
2.四層負載均衡,就是根據請求的ip+端口,根據設定的規則,將請求轉發到后端對應的IP+端口上。七層負載均衡,則是在四層基礎上,再去考慮應用層的特征。比如說一個WEB服務器的負載均衡,除了根據IP+80端口來判斷之外,還可以根據七層URL,瀏覽器類別,來決定如何去轉發流量。
3.四層交換機主要分析IP層和TCP/UDP層,實現四層流量負載,這種負載不關心七層的應用協議。七層的交換機除了支持四層之外,還要分析應用層,如HTTP協議、URL、cookie等信息。四層常見軟件是haproxy,LVS,七層常見軟件是nginx。
4.簡單來說,七層負載均衡走流量,四層負載均衡是不走流量的,效率會更高
5.四層提供終端到終端的連接
6.四層不能修改后端請求的資源類型
52.HAProxy 配置文件有哪些組成部分?
default:為后續的其他部分設置缺省參數,缺省參數可以被后續部分重置;
frontend:描述集群接收客戶端請求的信息集合;
backend:描述轉發鏈接的后端服務器集合;
listen:把 frontend 和 backend 結合到一起的完整聲明。
53.lvs、Haproxy與nginx的區別?
lvs工作在4層,消耗內存資源低,抗負載能力較強,沒有流量產生,配置簡單,工作穩定,應用較廣,但lvs 軟件本身不支持正則表達式處理,不能做動靜分離,不支持健康檢查
Haproxy基于四層和七層的轉發,是專業的代理服務器,支持虛擬主機,支持Session和Cookie的功能, 效率.負載均衡速度比nginx高但低于lvs,支持TCP協議的負載均衡轉發,負載均衡的策略較多,有8種策略,支持url檢查,健康檢查等
nginx基于七層的轉發,當開啟upstream模塊支持四層轉發,支持并發量大,正則表達式比Haproxy強大,但監控檢查只支持通過端口,無法使用url檢查
Haproxy和Nginx由于可以做七層的轉發,所以URL和目錄的轉發都可以做,在很大并發量的時候選 擇lvs,中小型企業并發量不大可以做nginx或者Haproxy,由于Haproxy配置比較簡單,所以中小企業 更推薦使用Haproxy
54.Keepalived通過什么判斷哪臺主機為主服務器,通過什么方式設置浮動IP?
keepalived首先做初始化檢查state狀態,master為主服務器,backup為備用服務器,然后再對比所有 服務器的priority,誰的優先級高誰就是最終的主服務器
優先級高的服務器會通過IP命令為自己的電腦配置一個提前定義好的浮動IP地址
55.keepalived的工作原理?
利用vrrp的原理進行工作,提供高可用集群服務,keepalived根據優先級選出master主機和slave主 機,當服務器節點異常或出現故障時,keepalived回將故障節點從集群系統中自動剔除,故障節點恢 復之后,keepalived再將器加入到集群系統中,所有工作無需人工干預
56.keepalived是主要應用在哪層
Keepalived是基于VRRP協議的實現,主要用在IP層、TCP層和應用層。
1:IP層:Keepalived會定期向服務器群中的服務器發送一個數據包(既Ping),如果發現IP地址沒有激活,Keepalived便報告這臺服務器失效,并將它從服務器群中剔除。
2:TCP層:類似IP層,只不過這里是檢測服務的端口
3:應用層:Keepalived將根據用戶的設定來檢查服務程序的運行是否正常
57.keepalived啟動后會有幾個進程?
keepalived正常啟動的時候,共啟動3個進程,一個是父進程,負責監控其子進度程,一個是vrrp子進程,另外一個是checkers子進程兩個子問進程都被系統watchlog看管,兩個子進程各自負責復雜自己的事。Healthcheck子進程答檢查各自服務器的健康狀況版,,例如http,lvs。如果healthchecks進程檢查到master上服務不可用了,就會通知權本機上的vrrp子進程,讓他刪除通告,并且去掉虛擬IP,轉換為BACKUP狀態。
58.keepalived的健康檢查方式
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 失敗重試的間隔時間,單位為秒
59.HTTP原理
HTTP是基于客戶/服務器模式,且面向連接的。典型的HTTP事務處理有如下的過程:
(1)客戶與服務器建立連接;
(2)客戶向服務器提出請求;
(3)服務器接受請求,并根據請求返回相應的文件作為應答;
(4)客戶與服務器關閉連接。
客戶與服務器之間的HTTP連接是一種一次性連接,它限制每次連接只處理一個請求,當服務器返回本次請求的應答后便立即關閉連接,下次請求再重新建立連接。這種一次性連接主要考慮到WWW服務器面向的是Internet中成干上萬個用戶,且只能提供有限個連接,故服務器不會讓一個連接處于等待狀態,及時地釋放連接可以大大提高服務器的執行效率。
HTTP是一種無狀態協議,即服務器不保留與客戶交易時的任何狀態。這就大大減輕了服務器記憶負擔,從而保持較快的響應速度。HTTP是一種面向對象的協議。允許傳送任意類型的數據對象。
它通過數據類型和長度來標識所傳送的數據內容和大小,并允許對數據進行壓縮傳送。當用戶在一個HTML文檔中定義了一個超文本鏈后,瀏覽器將通過TCP/IP協議與指定的服務器建立連接
60.http請求和相應的過程
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)瀏覽器解析響應數據
瀏覽器解析響應數據后,數據會呈現在瀏覽器中
61.curl的返回的內容
返回狀態碼、時間日期、服務版本號、系統、協議的頭部信息、請求方式、網頁內容的格式、請求變量的實體標簽值(類似于hash值)、字符編碼、文本格式
62.http協議請求url共定義了哪幾種方法
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服務器支持擴展自定義的方法。
63.http的get和post方法有什么區別
區別:
get請求無消息體,只能攜帶少量數據
post請求有消息體,可以攜帶大量數據
攜帶數據的方式:
get請求將數據放在url地址中
post請求將數據放在消息體中
GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;
GET方式提交的數據最多只能有1024字節,而POST則沒有此限制
64.HTTP常見狀態碼 ?
狀態碼 功能描述
200 一切正常
301 永久重定向302 臨時重定向
401 用戶名或密碼錯誤
403 禁止訪問(客戶端IP地址被拒絕)
404 文件不存在
414 請求URI頭部過長
500 服務器內部錯誤
502 Bad Gateway
65.curl命令如何去發一個get請求和post請求,區別是什么,刪除是什么
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
66.請詳細描述http協議原理
http協議:是客戶端與服務端之間通信傳輸數據的基礎,HTTP協議是基于TCP/IP協議之上的協議
原理包括四個過程:
連接:瀏覽器與服務器建立連接,打開一個socket的虛擬文件,表明連接建立成功
請求:瀏覽器通過socket向服務器提交請求(一般是GET或POST請示命令)
應答:瀏覽器請求提交后,通過HTTP協議傳送給服務器,服務器收到后進行處理將結果又通過
HTTP回傳給客戶端,從而在客戶端顯示出所請求的頁面
關閉連接:當應答結束后,瀏覽器與服務器之間就斷開連接
67.配置httpd網站服務時,快速添加新的虛擬主機
1)為每一個虛擬主機建立一份獨立的配置文件,放到/etc/httpd/conf.d目錄下,配置文件名稱以.conf 結尾
2)配置<VirtualHost IP 端口號>.. ..</VirtualHost>區段標記,其中使用語句ServerName指定站點名稱,使用DocumentRoot指定網頁目錄
3)重起httpd服務
68.動態網頁和靜態網頁的區別,基于httpd要支持PHP程序,基于Python程序具備的條件
靜態網頁:瀏覽器訪問到的網頁就是服務端提供的文件
動態網頁:瀏覽器訪問到的網頁文件時服務端指定的程序動態生成的網頁文件
支持PHP的程序:安裝httpd、php軟件包
支持Python程序:安裝httpd、mod_wsgi軟件包,并在配置站點時添加程序調用別名
(WSGIScriptAlias)
69.基于httpd架設一個安全web站點的條件
安裝mod_ssl模塊軟件包
提供可用的網站證書、密鑰部署到正確的位置
修改/etc/httpd/conf.d/ssl.conf配置文件,指定站點名、網頁目錄、證書以及密鑰的路徑
70.什么是中間件?什么是jdk?
中間件介紹:
中間件是一種獨立的系統軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源中間件位于客戶機/ 服務器的操作系統之上,管理計算機資源和網絡通訊
是連接兩個獨立應用程序或獨立系統的軟件。相連接的系統,即使它們具有不同的接口
但通過中間件相互之間仍能交換信息。執行中間件的一個關鍵途徑是信息傳遞,通過中間件,應用程序可以工作于多平臺或OS環境。
jdk:jdk是Java的開發工具包,它是一種用于構建在 Java 平臺上發布的應用程序、applet 和組件的開發環境
總結
- 上一篇: 监控zabbix面试题
- 下一篇: mysql与redis面试题