[TOC]
## apache与nginx的区别
> nginx本身只能处理静态页的解析,如果要解析动态页面的话,需要用到反向代理的功能
> nginx有**反向代理功能**,能做负载均衡。apache没有
> nginx更轻量级,占用的内存很小。而apache更稳定
> nginx更适合高并发,因为nginx处理请求属于异步非阻塞的,可以多个连接(万级别)对应一个进程。而apache 则是阻塞型的,一个连接对应一个进程。
> nginx 处理 静态资源 性能高于apache,处理 动态语言 性能低于apache,因为nginx处理动态语言经过的层次太多了。
![](https://box.kancloud.cn/b2c8983a7ef36e3294da56cf03fea8f4_1508x414.png)
> **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
> 参考:https://www.kancloud.cn/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设计模式
- 创建型模式
- 工厂模式
- 单例模式
- 注册器模式
- 工厂模式于策略模式的区别
- 结构型模式
- 适配器模式
- 桥接模式
- 装饰器模式
- 行为型模式
- 观察者模式
- 策略模式
- 高并发设计