一、安裝nginx
yum install keepalived
二、keepalived.conf配置文件配置git
global_defs {
notification_mail {
## 指定keepalived在發生切換時須要發送的郵箱
}
notification_mail_from xxx@xxx.com #發件人
#smtp_server xxx.smtp.com
#smtp_connect_timeout 30
router_id LVS_MAIN #運行keepalived機器的一個標識
}
vrrp_instance_VI_1 {
state MASTER # 標識爲主爲master,備爲backup
interface ens33 #設置實例綁定的網卡
virtual_router_id 51 # 同一個實例下的virtual_router_id必須相同
priority 100 # master的權重必須大於backup
advert_int 1 # master與backup負載均衡器之間同步檢測的時間間隔,單位秒
authentication { #設置認證
auth_type PASS
auth_pass 123
}
virtual_ipaddress { #設置vip
192.168.3.111
192.168.3.112 #能夠設置多個虛擬IP
}
}
三、啓動 /etc/init.d/keepalived startredis
Session共享問題解決方案: 因爲請求先經過Nginx代理服務器,再有nginx服務器分配請求到具體的應用服務器中間就會遇到Session共享問題:數據庫
1.ip_hash 根據ip分配請求的應用服務器緩存
2.不使用session,換cookie就不會存在此問題,可是網站安全度下降安全
3.使用cookie和redis緩存(建議此方案,方便擴展,緩存中速度高效)【會在後面項目中講】服務器
例如:生成一個uuid做爲用戶信息的key存放在redis緩存中,再將uuid做爲cookie的值寫會客戶端,cookie的key能夠用固定值(常量)cookie
四、jwt網絡
5.放到MySQL數據庫中,不推薦(增長數據庫的io)session
1.https簡介
HTTPS實際上是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會經過TLS進行加密,因此傳輸的數據都是加密後的數據
2.https協議原理
首先,客戶端與服務器創建鏈接,各自生成私鑰和公鑰,是不一樣的。服務器返給客戶端一個公鑰,而後客戶端拿着這個公鑰把要搜索的東西加密,稱之爲密文,並連並本身的公鑰一塊兒返回給服務器,服務器拿着本身的私鑰解密密文,而後把響應到的數據用客戶端的公鑰加密,返回給客戶端,客戶端拿着本身的私鑰解密密文,把數據呈現出來
1.the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37
緣由是nginx缺乏http_ssl_module模塊,編譯安裝時帶上--with-http_ssl_module配置就能夠了
2.若是已經安裝過nginx,想要添加模塊看下面
1)切換到nginx源碼包
cd /usr/local/src/nginx-1.11.3
2)查看ngixn原有的模塊
/usr/local/nginx/sbin/nginx -V
3)從新配置
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
4)從新編譯,不須要make install安裝。不然會覆蓋
make
5)備份原有已經安裝好的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
6)將剛剛編譯好的nginx覆蓋掉原來的nginx(ngixn必須中止)
cp ./objs/nginx /usr/local/nginx/sbin/
這時,會提示是否覆蓋,請輸入yes,直接回車默認不覆蓋
7)啓動nginx,查看nginx模塊,發現已經添加
/usr/local/nginx/sbin/nginx -V
注意:通常生成的目錄,應該放在nginx/conf/ssl目錄
1.建立服務器證書密鑰文件 server.key:
openssl genrsa -des3 -out server.key 1024
輸入密碼,確認密碼,本身隨便定義,可是要記住,後面會用到。
2.建立服務器證書的申請文件 server.csr
openssl req -new -key server.key -out server.csr
輸出內容爲:
Enter pass phrase for root.key: ← 輸入前面建立的密碼
Country Name (2 letter code) [AU]:CN ← 國家代號,中國輸入CN
State or Province Name (full name) [Some-State]:BeiJing ← 省的全名,拼音
Locality Name (eg, city) []:BeiJing ← 市的全名,拼音
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. ← 公司英文名
Organizational Unit Name (eg, section) []: ← 能夠不輸入
Common Name (eg, YOUR name) []: ← 此時不輸入
Email Address []:admin@mycompany.com ← 電子郵箱,可隨意填
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ← 能夠不輸入
An optional company name []: ← 能夠不輸入
4.備份一份服務器密鑰文件
cp server.key server.key.org
5.去除文件口令
openssl rsa -in server.key.org -out server.key
6.生成證書文件server.crt
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
proxyPort=443
redirectPort=443
server{
#比起默認的80 使用了443 默認 是ssl方式 多出default以後的ssl
listen 443 default ssl;
#default 可省略
#開啓 若是把ssl on;這行去掉,ssl寫在443端口後面。這樣http和https的連接均可以用
ssl on;
#證書(公鑰.發送到客戶端的)
ssl_certificate ssl/server.crt;
#私鑰,
ssl_certificate_key ssl/server.key;
#下面是綁定域名
server_name www.daj.com;
location / {
#禁止跳轉
proxy_redirect off;
#代理淘寶
proxy_pass https://www.gerry.com;
}
}
重啓Nginx
Nginx是經典的多進程模型。Nginx啓動後以daemon的方式在後臺運行,後臺進程包含一個master進程和多個worker進程,具體以下圖:
圖1 Nginx多進程模型
master進程主要用來管理worker進程,具體包括以下4個主要功能: (1)接收來自外界的信號。 (2)向各worker進程發送信號。 (3)監控woker進程的運行狀態。 (4)當woker進程退出後(異常狀況下),會自動從新啓動新的woker進程。 woker進程主要用來處理網絡事件,各個woker進程之間是對等且相互獨立的,它們同等競爭來自客戶端的請求,一個請求只可能在一個woker進程中處理,woker進程個數通常設置爲機器CPU核數。
對Nginx進程的控制主要是經過master進程來作到的,主要有兩種方式: (1)手動發送信號 從圖1能夠看出,master接收信號以管理衆woker進程,那麼,能夠經過kill向master進程發送信號,好比kill -HUP pid用以通知Nginx從容重啓。所謂從容重啓就是不中斷服務:master進程在接收到信號後,會先從新加載配置,而後再啓動新進程開始接收新請求,並向全部老進程發送信號告知再也不接收新請求並在處理完全部未處理完的請求後自動退出。 (2)自動發送信號 能夠經過帶命令行參數啓動新進程來發送信號給master進程,好比./nginx -s reload用以啓動一個新的Nginx進程,而新進程在解析到reload參數後會向master進程發送信號(新進程會幫咱們把手動發送信號中的動做自動完成)。固然也能夠這樣./nginx -s stop來中止Nginx。
3、網絡事件 Nginx採用異步非阻塞的方式來處理網絡事件
master進程先建好須要listen的socket後,而後再fork出多個woker進程,這樣每一個work進程均可以去accept這個socket。當一個client鏈接到來時,全部accept的work進程都會受到通知,但只有一個進程能夠accept成功,其它的則會accept失敗。Nginx提供了一把共享鎖accept_mutex來保證同一時刻只有一個work進程在accept鏈接,從而解決驚羣問題。當一個worker進程accept這個鏈接後,就開始讀取請求,解析請求,處理請求,產生數據後,再返回給客戶端,最後才斷開鏈接,這樣一個完成的請求就結束了。
一、安裝模塊
./configure --prefix=/usr/local/nginx --with-stream --with-http_stub_status_module
二、配置文件
#nginx.conf部分配置
# upd/tcp
stream {
upstream backend {
server 192.168.3.173:3306;
}
server {
listen 8686;
proxy_connect_timeout 8s;
proxy_timeout 24h; #代理超時
proxy_pass backend;
}
}
http {
}