1.描述下大流量高并发的网站解决方案:
1.nginx负载均衡
2.nginx web cache 缓存
3.php代码静态化
4.redis
5.sql语句索引的使用
6.主从复制,读写分离(主从分流)
7.分库分表或分区
8.磁盘分布
DNS负载均衡->负载均衡器->集群服务器->web服务器(NGINX)->(PHP)静态缓存(tp,smarty)->文件数据缓存(tp,mongodb)->内存数据缓存(memcache,redis)->给数据加索引
2.DNS负载均衡:
dns负载均衡是通过DNS服务器实现的,主要用于把请求均匀的分布到nginx服务器上。其实真是情况中可能是用来根据地域区分请求。但是一个地域中的请求还算需要均匀的分配到nginx服务器上的;
在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的
3.Nginx负载均衡:
nginx作为反向代理服务器,主要负责把请求均匀的分摊到应用服务器中。为了达到均匀,Nginx有五种负载均衡策略。
4.Nginx的功能:
作为http server(代替apache,对PHP需要FastCGI处理器支持)
反向代理服务器
实现负载均衡
虚拟主机
FastCGI:Nginx本身不支持PHP等语言,但是它可以通过FastCGI来将请求扔给某些语言或框架处理;
4.Nginx与apache:
Nginx 是异步,非阻塞,轻量级,高并发特性
apache 是同步,阻塞,非轻量级,不支持高并发
轻量级,同样起web 服务,比apache 占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程
5. 反向代理服务器的优点?
ans:反向代理服务器可以隐藏服务器的存在和特性,充当web 与服务器的中间件,对于安全方面是很好的
6. nginx如何实现高并发?
ans:一个主进程,多个工作进程,每个工作进程可以处理多个请求,并且是异步的处理该请求,非阻塞性质的web服务器。
niginx的高并发得益于采用的是epoll模型(异步非阻塞)
apach采用的是select模型(同步阻塞)
7.nginx配置跨域?
server{
# 监听9099端口
listen 9099;
# 域名是localhost
server_name localhost;
#凡是localhost:9099/api这个样子的,都转发到真正的服务端地址http://localhost:9871
location ^~ /api {
proxy_pass http://localhost:9871;
}
}
8.nginx安装
yum install pcre-devel -y 安装包
tar xzf nginx-1.6.2.tar.gz 解压安装包
cd nginx-1.6.2 进入安装包
ls 查看
pwd 查看
make
make install
user/local/nginx/sbin/nginx 启动
ps -ef| grep nginx 查看进程是否启动
/user/local/nginx/sbin/nginx -s reload 重启nginx
vi nginx config 编辑配置文件
kill -QUIT `cat/var/run/nginx.pid` 完美重启, 平滑重启(在不停止nginx的情况下重启nginx)
TERM/INT 快速重启
pkill nginx 平时用的最多的是先终止再启动
-v 查看版本
-V 查看参数(升级可能会用)
9.nginx 日志
error_log /user/local/nginx/logs/error.log
错误等级:debug->info->notice->warn->error->crit
10.工作模式及连接上线
use epoll 多路复用io
work_connection 102400 单个后台进程最大连接并发数(最大连接数=进程数*连接数)
multi_accept_on 尽可能接受多的请求
#设定http服务器,利用他的反向代理提高负载均衡支持
http{
#设定mime类型,类型有mime.type 定义
include mime.types;
default_type:
#设定日志格式
access_log /user/local/nginx/log/ngin/access.log;
sendfile on; 是否调用sendfile函数来输出文件
autoindex on; 开启目录访问
tcp_nopush on; 防止网络阻塞
***keepalive_timeout 60; 客户端到服务端持久链接有效时间,对后继请求避免重建连接
}
#开启gzip压缩
gzip on; 开启gzip压缩(压缩js,csss,下载变快)
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2; #压缩级别越大,压缩比率越大(2-9),同时占用cpu更多
gzip_types text/js/css #压缩文件类型
#文件流
client_max_body_size 10m; #允许客户端请求的最大文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲客户端请求的最大字节数
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #后端服务器读取超时
#服务
server{
listen 80; 监听80端口
server_name www.cyh.com; 定义访问路径
access_log log/access.log main; 本虚拟主机访问日志
root /data/webapp/cyh 服务器默认网站根目录位置
proxy_next_upstream http_502 http_504 error timeout invalid_header 如果后台报错或超时,自动转发到upstream负载均衡池的另一台服务器,实现故障转移
proxy_pass http://www.iworker.cn 请求转到后端定义的均衡模块中
#配置Nginx动静分离,定义静态页面直接重Nginx发布目录读取
location ~.*.(html|gif|jp)${
root /data/www/cyh;
expire: 3d;
}
#配置 php脚本请求全部转发到fastCGI处理,使用fastCGI默认配置
location ~.php${
root /root;
fastcgi_pass 192.168.38:8080;
fastcgi_index index.php;
fastcgi_param
}
}
proxy_read_timeout 90; #l连接成功后,后端(php)响应时间(代理接受超时)