網(wǎng)站建設(shè)是設(shè)計(jì)師嗎軟件推廣方案經(jīng)典范文
WEB服務(wù)器的部署及優(yōu)化
用戶常用關(guān)于web信息
什么是www
www是world wide web的縮寫(xiě),即萬(wàn)維網(wǎng),也就是全球信息廣播
通常說(shuō)的上網(wǎng)就是使用www來(lái)查詢用戶所需要的信息。
www可以結(jié)合文字、圖形、影像以及聲音等多媒體,超鏈接的方式將信息以Internet傳遞到世界各
處。
當(dāng)連接www網(wǎng)站,該網(wǎng)站會(huì)提供一些數(shù)據(jù),客戶端要使用可以解析這些數(shù)據(jù)的軟件來(lái)處理,那就是瀏覽器
網(wǎng)址
URI:Uniform Resource Identifier統(tǒng)一資源標(biāo)識(shí),分為URL和URN
URN:Uniform Resource Naming,統(tǒng)一資源命名,P2P下載使用的磁力鏈接是URN的一種實(shí)現(xiàn)
URL:Uniform Resorce Locator,統(tǒng)一資源定位符用于描述某服務(wù)器某特定資源位置
兩者區(qū)別:而URL提供查找該事物的方法。URN僅用于命名,而不指定地址
URL組成
<scheme>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>
scheme | 方案 | 訪問(wèn)服務(wù)器以獲取資源時(shí)要使用哪種協(xié)議 |
user | 用戶 | 某些方案訪問(wèn)資源時(shí)需要的用戶名 |
password | 密碼 | 用戶對(duì)應(yīng)的密碼,中鍵用 : 分隔 |
host | 主機(jī) | 資源主服務(wù)器的主機(jī)名或IP地址 |
port | 端口 | 資源主服務(wù)器正在監(jiān)聽(tīng)的端口號(hào),很多方案有默認(rèn)端口號(hào) |
path | 路徑 | 服務(wù)器資源的本地名,由一個(gè) / 將其與前面的URL組件分隔 |
params | 參數(shù) | 指定輸入的參數(shù),參名為 / 值對(duì),多個(gè)參數(shù)用 ; 分隔 |
query | 查詢 | 傳遞參數(shù)給程序,如數(shù)據(jù)庫(kù),用 ? 分隔,多個(gè)查詢用 & 分隔 |
frag | 片段 | 一小片或一部分資源的名字,此組件在客戶端使用,用 # 分隔 |
HTTP簡(jiǎn)介
什么是http
HTTP協(xié)議:全稱為Hyper Text Transfer Protocol(超文本傳輸協(xié)議)
簡(jiǎn)單來(lái)說(shuō)http就是從服務(wù)器傳輸超文本(html)到本地瀏覽器的傳輸協(xié)議
HTTP協(xié)議工作于B/S架構(gòu)上,瀏覽器作為HTTP客戶端通過(guò)URL向HTTP服務(wù)端即WEB服務(wù)端發(fā)送請(qǐng)求(Request)Web服務(wù)端根據(jù)接收到的請(qǐng)求數(shù)據(jù)后,向客戶端發(fā)送響應(yīng)信息(Response)
https://developer.mozilla.org/zh-CN/docs/Web
http工作機(jī)制
一次http事務(wù)包括:
http請(qǐng)求:http request
http響應(yīng): http response
Web資源: web resource
一個(gè)網(wǎng)頁(yè)由多個(gè)資源(文件)構(gòu)成,打開(kāi)一個(gè)頁(yè)面,通常會(huì)有多個(gè)資源展示出來(lái),但是每個(gè)資源都要單獨(dú)請(qǐng)求。因此,一個(gè)"Web頁(yè)面”通常并不是單個(gè)資源,而是一組資源的集合
資源類型:
靜態(tài)文件:無(wú)需服務(wù)端做出額外處理,服務(wù)器端和客戶端的文件內(nèi)容相同
常見(jiàn)文件后綴:.html,.txt,.jpg,.js,.css,mp3,avi
動(dòng)態(tài)文件:服務(wù)端執(zhí)行程序,返回執(zhí)行的結(jié)果,服務(wù)器端和客戶端的文件內(nèi)容不相同
常見(jiàn)文件后綴:.php,jsp,asp
web中常用語(yǔ)言介紹
html語(yǔ)言 超文本標(biāo)記語(yǔ)言
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>HTML語(yǔ)言</title>
</head>
<body><h1 style="color: red;">hello</h1><p><a href="www.baidu.com">百度</a></p>
</body>
</html>
css 層疊樣式表 表述網(wǎng)站的風(fēng)格
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>HTML語(yǔ)言</title><link rel="stylesheet" href="./1.css">
</head>
<body><h1>css演示</h1><p>CSS不僅可以靜態(tài)地修飾網(wǎng)頁(yè),還可以配合各種腳本語(yǔ)言動(dòng)態(tài)地對(duì)網(wǎng)頁(yè)各元素進(jìn)行格式化。</p><p class="ex">class</p>
</body>
</html>
body{color: red;
}
h1{color: yellow;
}
p.ex{color: blue;
}
js實(shí)現(xiàn)html和css實(shí)現(xiàn)不了的功能比如動(dòng)畫(huà)效果
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><h2>js</h2><button type="button" onclick="document.getElementById('demo').innerHTML=Date()">點(diǎn)擊顯示日期和時(shí)間</button><p id="demo"></p>
</body>
</html>
mine(Multipurpose Internet Mail Extensions)多用途因特網(wǎng)郵件擴(kuò)展
它設(shè)計(jì)的最初目的是為了在發(fā)送電子郵件時(shí)附加多媒體數(shù)據(jù),讓郵件客戶程序能根據(jù)其類型進(jìn)行處
理
為了支持多媒體數(shù)據(jù)類型,HTTP協(xié)議中就使用了附加在文檔之前的MIME數(shù)據(jù)類型信息來(lái)標(biāo)識(shí)數(shù)據(jù)類型。
其主要功能是讓服務(wù)器將它們發(fā)送的多媒體數(shù)據(jù)的類型告訴瀏覽器
服務(wù)器將MIME標(biāo)志符放入傳送的數(shù)據(jù)中來(lái)告訴瀏覽器使用哪種插件讀取相關(guān)文件
MIME類型存在于HTTP響應(yīng)報(bào)文的響應(yīng)頭部信息里,它是一種文本標(biāo)記
MIME格式: type/subtype 文件類型后綴(html txt jpg png... ...)
MIME類型 | 文件類型 |
text/html | html、htm、shtml文本類型 |
text/css | css文本類型 |
text/xml | xml文本類型 |
image/gif | gif圖像類型 |
image/jpeg | jpeg、jpg圖像類型 |
application/javascript | js文本類型 |
text/plain | txt文本類型 |
application/json | json文本類型 |
video/mp4 | mp4文本類型 |
video/quicktime | mov文本類型 |
video/x-flv | flv文本類型 |
video/x-ms-wmv | wmv視頻類型 |
video/x-msvideo | avi視頻類型 |
http訪問(wèn)請(qǐng)求完整過(guò)程
1.建立連接:
TCP的3次握手建立鏈接,向服務(wù)器發(fā)送http請(qǐng)求,服務(wù)器拒絕或允許
2.接受請(qǐng)求
接受客戶端請(qǐng)求報(bào)文對(duì)某個(gè)資源的一次請(qǐng)求過(guò)程web響應(yīng)訪問(wèn)模型
a.單進(jìn)程I/O模型:啟動(dòng)一個(gè)進(jìn)程處理用戶請(qǐng)求,而且一次只處理一個(gè),多個(gè)請(qǐng)求被串行響應(yīng)
b.多進(jìn)程I/O模型:并行啟動(dòng)多個(gè)進(jìn)程,每個(gè)進(jìn)程響應(yīng)一個(gè)連接請(qǐng)求
c.復(fù)用I/O結(jié)構(gòu):啟動(dòng)一個(gè)進(jìn)程,同時(shí)響應(yīng)N個(gè)連接請(qǐng)求
d.復(fù)用的多進(jìn)程I/O模型:啟動(dòng)M個(gè)進(jìn)程,每個(gè)進(jìn)程響應(yīng)N個(gè)連接請(qǐng)求,同時(shí)接收M*N個(gè)請(qǐng)求
3.處理請(qǐng)求:
服務(wù)器對(duì)請(qǐng)求報(bào)文進(jìn)行解析,并獲取請(qǐng)求的資源及請(qǐng)求方法等相關(guān)信息,根據(jù)方法,資源,首部和可選的主體部分對(duì)請(qǐng)求進(jìn)行處理常用請(qǐng)求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS
4.訪問(wèn)資源:
服務(wù)器獲取請(qǐng)求報(bào)文中請(qǐng)求的資源web服務(wù)器,即存放了web資源的服務(wù)器,負(fù)責(zé)向請(qǐng)求者提供對(duì)方請(qǐng)求的靜態(tài)資源,或動(dòng)態(tài)運(yùn)行后生成的資源
5.構(gòu)建響應(yīng)報(bào)文:
一旦Web服務(wù)器識(shí)別除了資源,就執(zhí)行請(qǐng)求方法中描述的動(dòng)作,并返回響應(yīng)報(bào)文。響應(yīng)報(bào)文中包含有響應(yīng)狀態(tài)碼、響應(yīng)首部,如果生成了響應(yīng)主體的話,還包括響應(yīng)主體
響應(yīng)實(shí)體:如果事務(wù)處理產(chǎn)生了響應(yīng)主體,就將內(nèi)容放在響應(yīng)報(bào)文中回送過(guò)去。響應(yīng)報(bào)文中通常包括:
描述了響應(yīng)主體MIME類型的Content-Type首部
描述了響應(yīng)主體長(zhǎng)度的Content-Length
實(shí)際報(bào)文的主體內(nèi)容
1)URL重定向:web服務(wù)構(gòu)建的響應(yīng)并非客戶端請(qǐng)求的資源,而是資源另外一個(gè)訪問(wèn)路徑
2)MIME類型:Web服務(wù)器要負(fù)責(zé)確定響應(yīng)主體的MIME類型。多種配置服務(wù)器的方法可將MIME類型與資源管理起來(lái)
6.發(fā)送響應(yīng)報(bào)文
Web服務(wù)器通過(guò)連接發(fā)送數(shù)據(jù)時(shí)也會(huì)面臨與接收數(shù)據(jù)一樣的問(wèn)題。服務(wù)器可能有很多條到各個(gè)客戶端的連接,有些是空閑的,有些在向服務(wù)器發(fā)送數(shù)據(jù),還有一些在向客戶端回送響應(yīng)數(shù)據(jù)。服務(wù)器要記錄連接的狀態(tài),還要特別注意對(duì)持久連接的處理。對(duì)非持久連接而言,服務(wù)器應(yīng)該在發(fā)送了整條報(bào)文之后,關(guān)閉自己這一端的連接。對(duì)持久連接來(lái)說(shuō),連接可能仍保持打開(kāi)狀態(tài),
http協(xié)議報(bào)文頭部結(jié)構(gòu)
請(qǐng)求報(bào)文
請(qǐng)求報(bào)文由三部分組成即:開(kāi)始行(請(qǐng)求行)、首部行(請(qǐng)求頭部)、實(shí)體主體(請(qǐng)求體)
開(kāi)始行:請(qǐng)求方法 url 版本 CRLF
首部行通常用鍵值表示
空格
實(shí)體主體數(shù)據(jù),一般在post動(dòng)作中可以提看到
開(kāi)始行中的請(qǐng)求方法:
方法 | 描述 |
GET | 請(qǐng)求指定頁(yè)面信息,返回實(shí)體主體 |
HEAD | 類似get請(qǐng)求,但返回響應(yīng)中沒(méi)有主體內(nèi)容,用戶獲取包頭 |
POST | 向指定資源提交數(shù)據(jù)請(qǐng)求,數(shù)據(jù)包含在請(qǐng)求中,此請(qǐng)求可能會(huì)生成新的資源或修改已有資源 |
PUT | 從客戶端向服務(wù)端傳送數(shù)據(jù)取代指定的文檔內(nèi)容 |
DELETE | 請(qǐng)求服務(wù)器刪除指定頁(yè)面 |
CONNECT | 通常被用于通過(guò) HTTP 代理服務(wù)器來(lái)建立與其他服務(wù)器的安全連接。 |
OPTIONS | 允許客戶端查看服務(wù)器的性能 |
TRACE | 回顯服務(wù)器收到的請(qǐng)求 |
響應(yīng)報(bào)文
響應(yīng)報(bào)文由三部分組成即:開(kāi)始行(響應(yīng)行)、首部行(響應(yīng)體)、實(shí)體主體(報(bào)文主體)
開(kāi)始行:http版本 狀態(tài)碼 短語(yǔ) CRLF
首部行通常用鍵值表示
空格
實(shí)體主體數(shù)據(jù),即獲取內(nèi)容
狀態(tài)代碼
狀態(tài)碼由三位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類別,且有五種可能取值
狀態(tài)碼 | 含義 | 詳解 |
1xx | 指示信息 | 表示求情已接收,繼續(xù)處理 |
2xx | 成功 | 表示請(qǐng)求已被成功接收、理解、接收 |
3xx | 重定向 | 要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作 |
4xx | 客戶端錯(cuò)誤 | 請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)法實(shí)現(xiàn) |
5xx | 服務(wù)器錯(cuò)誤 | 服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求 |
常見(jiàn)狀態(tài)代碼、狀態(tài)描述的說(shuō)明如下:
狀態(tài)碼 | 含義 |
200 OK | 客戶端請(qǐng)求成功 |
400 Bad Request | 客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤,不能被服務(wù)器所理解 |
401 Unauthorized | 請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)碼必須和WWW-Authenticate報(bào)頭一起使用 |
403 Forbidden | 服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù) |
404 Not Fount | 請(qǐng)求資源不存在,例如輸入錯(cuò)誤的URL |
500 Internal Server Error | 服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤 |
503 Server Unavailable | 服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常 |
web服務(wù)器的配置
web服務(wù)的常用種類
Apache
Nginx
openresty
大廠自研
Nginx的安裝
開(kāi)源版本的Nginx官網(wǎng):http://nginx.org
Nginx在安裝的過(guò)程中可以選擇源碼安裝也可以選擇使用軟件包安裝
源碼安裝下載相應(yīng)的源碼壓縮包解壓后編譯完成安裝
軟件安裝包可以使用rpm或者apt命令進(jìn)行安裝,也可以使用dnf通過(guò)軟件倉(cāng)庫(kù)安裝
關(guān)閉防火墻
啟動(dòng)服務(wù)
[root@localhost ~]# systemctl start nginx.service
Nginx涉及到的文件
相關(guān)配置文件的作用
主配置目錄:/etc/nginx
相關(guān)配置文件:/etc/nginx/
[root@localhost ~]# tree /etc/nginx
/etc/nginx
├── conf.d #子配置目錄
│ └── vhosts.conf
├── default.d
├── fastcgi.conf
├── fastcgi.conf.default
├── fastcgi_params #fastci變量文件,用于識(shí)別php
├── fastcgi_params.default
├── koi-utf
├── koi-win
├── mime.types #媒體文件
├── mime.types.default
├── nginx.conf #主配置文件
├── nginx.conf.default
├── scgi_params #scgi變量文件,用于識(shí)別perl
├── scgi_params.default
├── uwsgi_params #uwsgi變量文件,用于識(shí)別python
├── uwsgi_params.default
└── win-utf[root@localhost ~]# ls /var/log/nginx/ #日志文件
Nginx配置文件內(nèi)容詳解
nginx全局配置
[root@localhost nginx]# cat nginx.confuser nginx; #nginx程序運(yùn)行用戶
worker_processes auto; #開(kāi)啟work進(jìn)程數(shù)量
error_log /var/log/nginx/error.log; #錯(cuò)誤日志
pid /run/nginx.pid; #pid文件include /usr/share/nginx/modules/*.conf;events {worker_connections 1024; #可接受最大連接數(shù)
}
http模塊配置
http {log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main; #訪問(wèn)日志sendfile on; #nginx服務(wù)器是否使用sendfile()傳輸文件tcp_nopush on; #當(dāng)包累計(jì)到一定大小后就發(fā)送,默認(rèn)0.2s一次tcp_nodelay on;keepalive_timeout 65; #長(zhǎng)連接超時(shí)時(shí)間types_hash_max_size 4096;include /etc/nginx/mime.types; #可解析的靜態(tài)資源類型default_type application/octet-stream; #用來(lái)配置nginx響應(yīng)前端請(qǐng)求默認(rèn)的MIME類型server {listen 80; #監(jiān)聽(tīng)端口listen [::]:80;server_name _; #服務(wù)器的名字root /nginx/html; #默認(rèn)發(fā)布目錄index index.html; #默認(rèn)發(fā)布文件# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html; #訪問(wèn)出錯(cuò)呈現(xiàn)錯(cuò)誤界面location = /50x.html {}}include /etc/nginx/conf.d/*.conf;}
Nginx配置
Nginx虛擬主機(jī)
默認(rèn)情況下nginx只能發(fā)布一個(gè)站點(diǎn)
如果要發(fā)布多個(gè)站點(diǎn)需要搭建多臺(tái)nginx來(lái)滿足,如果這樣會(huì)浪費(fèi)太多資源
為解決上述問(wèn)題,啟用nginx的虛擬主機(jī)即可
虛擬主機(jī)有兩種模式,基于IP或者基于域名
基于IP的虛擬主機(jī)
[root@localhost ~]# ip a a 172.25.254.101/24 dev ens160
[root@localhost ~]# ip a a 172.25.254.102/24 dev ens160
[root@localhost ~]# mkdir /nginx/virtual/timinglee.org/{news,bbs}/html
[root@localhost timinglee.org]# ls -ld /nginx/virtual/timinglee.org/{news,bbs}/html
drwxr-xr-x 2 root root 24 Nov 29 20:56 /nginx/virtual/timinglee.org/bbs/html
drwxr-xr-x 2 root root 24 Nov 29 20:57 /nginx/virtual/timinglee.org/news/html
[root@localhost ~]# echo bbs.timinglee.org > /nginx/virtual/timinglee.org/bbs/html/index.html
[root@localhost ~]# echo news.timinglee.org > /nginx/virtual/timinglee.org/news/html/index.html
[root@localhost ~]# vim /etc/nginx/nginx.confuser nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;include /usr/share/nginx/modules/*.conf;events {worker_connections 1024;
}http {log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 4096;include /etc/nginx/mime.types;default_type application/octet-stream;server {listen 80;listen [::]:80;server_name _;root /nginx/html;include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}include /etc/nginx/conf.d/*.conf;}[root@localhost ~]# cd /etc/nginx/conf.d/
[root@localhost conf.d]# ls
vhosts.conf
[root@localhost conf.d]# vim vhosts.conf
server {listen 172.25.254.101:80;server_name bbs.timinglee.org;root /nginx/virtual/timinglee.org/bbs/html;index index.html;
}server {listen 172.25.254.102:80;server_name news.timinglee.org;root /nginx/virtual/timinglee.org/news/html;index index.html;
}[root@localhost conf.d]# systemctl restart nginx.service
[root@localhost conf.d]# curl 172.25.254.101
bbs.timinglee.org
[root@localhost conf.d]# curl 172.25.254.102
news.timinglee.org
web服務(wù)器的數(shù)據(jù)加密(https)
https簡(jiǎn)介
HTTP協(xié)議以明文方式發(fā)送內(nèi)容,不提供任何方式的數(shù)據(jù)加密,
HTTP協(xié)議不適合傳輸一些敏感信息,比如信用卡號(hào)、密碼等
為了解決HTTP協(xié)議的這一缺陷,需要使用另一種協(xié)議:安全套接字層超文本傳輸協(xié)議HTTPS。
HTTPS全稱:Hyper Text Transfer Protocol over Secure Socket Layer ),是以安全為目標(biāo)的HTTP通道
HTTPS并不是一個(gè)新協(xié)議,而是HTTP+SSL(TLS)
原本HTTP先和TCP直接通信,而加了SSL后,就變成HTTP先和SSL通信,再由SSL和TCP通信相當(dāng)于SSL被嵌在了HTTP和TCP之間
SSL 是“Secure Sockets Layer”的縮寫(xiě),中文叫做“安全套接層”。它是在上世紀(jì)90年代中期,由網(wǎng)景公司設(shè)計(jì)的。到了1999年,SSL 應(yīng)用廣泛,已經(jīng)成為互聯(lián)網(wǎng)上的事實(shí)標(biāo)準(zhǔn)。IETF 就把SSL 標(biāo)準(zhǔn)化。標(biāo)準(zhǔn)化之后SSL被改為 TLS(Transport Layer Security傳輸層安全協(xié)議)