[TOC]
## apache與nginx的區別
> nginx本身只能處理靜態頁的解析,如果要解析動態頁面的話,需要用到反向代理的功能
> nginx有**反向代理功能**,能做負載均衡。apache沒有
> nginx更輕量級,占用的內存很小。而apache更穩定
> nginx更適合高并發,因為nginx處理請求屬于異步非阻塞的,可以多個連接(萬級別)對應一個進程。而apache 則是阻塞型的,一個連接對應一個進程。
> nginx 處理 靜態資源 性能高于apache,處理 動態語言 性能低于apache,因為nginx處理動態語言經過的層次太多了。

> **A**. 使用nginx的反向代理將請求轉發到php-fpm -> **B**.fastcgi進程管理器(php-fpm)收到請求后選擇并連接一個cgi解釋器
## nginx的兩種負載均衡方式
> 輪詢加權(也可以不加權,就是1:1負載)和
> ip_hash(根據ip分配后端服務器,解決session問題)
```
// 輪詢加權
upstream lb {
server 192.168.196.130 weight=1;
server 192.168.196.132 weight=2;
}
// ip_hash輪詢
upstream lb {
server 192.168.196.130;
server 192.168.196.132;
ip_hash;
}
```
## 服務器環境假設
> 假設
> 192.168.1.111(主) -> 安裝有LNMP,進行負載均衡控制
> 192.168.1.112(從) -> 安裝有LNMP,進行應用運行
> 192.168.1.113(從) -> 安裝有LNMP,進行應用運行
## LNMP的安裝
> 每臺服務器都安裝LNMP
> 參考:http://www.hmoore.net/wangking/linux/280755
## 負載均衡配置
### 主服務器(192.168.1.111)負載均衡配置
> vim /opt/nginx/conf/vhosts/zhuifanba.conf
```
upstream load_balance{
# 設置負載均衡的機器列表(采用輪詢的方式)
server 192.168.1.112:80; #從服務器1
server 192.168.1.113:80; #從服務器2
}
server {
listen 80;
server_name www.zhuifanba.com;
location / {
#設置反向代理
proxy_pass http://load_balance;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ .*\.(php|php5)?$
{
#設置反向代理
proxy_pass http://load_balance;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
# 設置靜態文件的反向代理
proxy_pass http://load_balance;
expires 30d;
}
location ~ .*\.(js|css)?$
{
# 設置靜態文件的反向代理
proxy_pass http://load_balance;
expires 1h;
}
}
```
### 從服務器(192.168.1.112~113)運行環境配置
> vim /opt/nginx/conf/vhosts/zhuifanba.conf
```
server {
listen 80;
server_name www.zhuifanba.com;
index index.html index.htm index.php;
root /var/www/zhuifanba/frontend/web;
location / {
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/zhuifanba/frontend/web$fastcgi_script_name;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
error_log /var/log/zhuifanba.error.log;
access_log /var/log/zhuifanba.access.log;
}
```
- 重點知識預覽
- 理解面向對象
- 魔術變量
- 魔法方法
- 面試題基礎篇
- PSR標準
- class (單繼承)
- trait (多繼承)
- 匿名函數
- 日期處理
- 文件處理
- 字符串處理
- BC Math
- 數組處理
- HTTP的各個狀態
- PHP環境變量
- session & cookie
- composer
- 變量的類型轉換和判斷類型方法
- PHP的錯誤和異常處理
- PHP的ob緩沖區
- PHP內存調試
- pcntl多進程
- PHP yield (生成器):節約內存
- Nginx負載均衡
- 同一臺服務器如何測試負載均衡
- 安全方面
- HTTPS實現
- PHP性能分析(xhprof)
- 高并發雪崩解決方法
- 接口加密設計(安全性)
- 數據庫(重要數據操作)日志記錄規范
- APP發版操作
- 緩存使用
- Memcache
- MYSQL緩存
- Redis
- 安裝與使用
- redis過期策略和內存淘汰機制
- Redis分布式鎖
- Redis雪崩、穿透、擊穿問題
- redis主從
- redis哨兵
- opcache
- 消息隊列
- Redis消息隊列
- Beanstalkd
- 數據庫匯總
- MYSQL哪些情況下會忽略索引
- MYSQL常用命令
- SQL高級運用
- MYSQL分布式集群使用
- 主從復制
- 同一臺服務器如何測試主從同步
- MYSQL索引類型
- MYSQL分區
- 鎖機制
- 事務隔離級別(臟讀、幻讀、不可重復讀)
- 分布式事務
- MYSQL性能優化
- swoole
- 安裝以及升級
- swoole進程初識
- TCP相關教程
- TCP數據傳輸DEMO(含同步、異步、長連接)
- Server異步投遞task任務
- TCP粘包問題
- websocket相關教程
- websocket初體驗DEMO
- websocket核心功能(心跳檢測、用戶校驗、重連機制)
- websocket用戶之間通信DEMO
- 定時器的使用
- 常駐內存以及如何避免內存泄漏
- max_request使用實例
- 守護進程、信號和平滑重啟
- 全文檢索工具
- MYSQL全文索引
- ElasticSearch全文檢索
- ES基礎知識
- Mapping及增刪改查
- DSL查詢語法
- 搜索建議 (completion)
- mysql轉dsl工具
- ES的安裝與PHP測試
- kibana可視化工具
- ELK日志管理系統
- PHP設計模式
- 創建型模式
- 工廠模式
- 單例模式
- 注冊器模式
- 工廠模式于策略模式的區別
- 結構型模式
- 適配器模式
- 橋接模式
- 裝飾器模式
- 行為型模式
- 觀察者模式
- 策略模式
- 高并發設計