Nginx+Apache Yii2.0 配置方案
最近用Yii2.0框架做了个小项目,虽然项目本身业务逻辑不复杂,但是由于本身业务逻辑的特殊性,在上午9点到12点之间系统访问量会突然上升(浏览量和用户上传文件量)。导致系统单纯的部署在Apache下,支撑不了这么多的并发数;单独部署Nginx又由于用户频繁的提交数据,出现大量的502错误。然后又由于各方面的原因,就想通过Nginx+Apache的方式来暂时性的解决这个问题。
安装apache和nginx的过程就跳过了。apache 监听的是 8080 端口,nginx 监听的是80端口。先贴出apache和nginx的配置内容,再来说下踩过的几个坑。
apache vhost 相关配置
1 <VirtualHost *:8080> 2 DocumentRoot "/www/wwwroot/website/web" 3 DirectoryIndex index.php 4 ServerName crm.yangcoder.com 5 ErrorLog "logs/crm-error.log" 6 CustomLog "logs/crm-access.log" common 7 </VirtualHost>
nginx 相关配置
1 upstream crm_cluster{ 2 server crm.yangcoder.com:8080; 3 #server crm.yangcoder.com:81; 4 #server crm.yangcoder.com:82; 5 } 6 server { 7 listen 80; 8 server_name crm.yangcoder.com; 9 10 #charset koi8-r; 11 access_log logs/crm.yangcoder.access.log; 12 error_log logs/crm.yangcoder.error.log; 13 root E:\\projects\\project\\trunk\\intracompany\\crm\\backend\\web; 14 index index.php index.html index.htm; 15 16 location / { 17 #设置主机头和客户端真实地址,以便服务器获取客户端真实IP 18 proxy_set_header Host $host; 19 proxy_set_header X-Real-IP $remote_addr; 20 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 21 proxy_set_header X-Forwarded-Protocol $scheme; 22 proxy_set_header PATH-INFO $request_uri; 23 add_header backendIP $upstream_addr; 24 add_header backendCode $upstream_status; 25 26 #禁用缓存 27 proxy_buffering off; 28 #反向代理的地址 29 proxy_pass http://crm_cluster; 30 31 if ($request_filename ~* ^.*?\.(txt|pdf|doc|xls|xlsx)$){ 32 add_header Content-Disposition: 'attachment;'; 33 34 } 35 } 36 37 38 #error_page 404 /404.html; 39 40 # redirect server error pages to the static page /50x.html 41 # 42 error_page 500 502 503 504 /50x.html; 43 location = /50x.html { 44 root E:\\projects\\project\\trunk\\intracompany\\crm\\backend\\web; 45 } 46 47 # proxy the PHP scripts to Apache listening on 127.0.0.1:80 48 # 49 #location ~ \.php$ { 50 # try_files $uri =404; 51 # proxy_redirect off; 52 # #设置主机头和客户端真实地址,以便服务器获取客户端真实IP 53 # proxy_set_header Host $host; 54 # proxy_set_header X-Real-IP $remote_addr; 55 # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 56 # proxy_set_header X-Forwarded-Protocol $scheme; 57 # proxy_set_header PATH-INFO $request_uri; 58 # add_header backendIP $upstream_addr; 59 # add_header backendCode $upstream_status; 60 # 61 # #禁用缓存 62 # proxy_buffering off; 63 # #反向代理的地址 64 # proxy_pass http://crm_cluster; 65 #} 66 67 68 69 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 70 { 71 expires 30d; 72 } 73 74 location ~ .*\.(js|css)?$ 75 { 76 expires 30d; 77 } 78 }
通过测试,能够成功实现动态访问走apache,静态资源访问走nginx。稍微缓解了,项目的压力。
踩过的坑:
1、在本机调试时,访问动态内容没又问题,但是访问静态资源时出现500的错误。找了好久,最后发现是:【root D:\trunk\src\websit 】,只用了单‘\’,导致nginx 把'\t'解析成一个tab空格了。相当的囧。换成'\\'就可以了。
2、Yii2.0 开启了Url美化功能后,导致转发的动态访问出现404或者只能访问默认首页。找了官方教程和网上的方法,用nginx或者apahce单独部署是可以的。但是使用nginx+apache结合就不行。
比如:如下解决方案
1 location / { 2 3 if (!-e $request_filename){ 4 5 rewrite ^/(.*) /index.php last; 6 7 } 8 9 }
通过日志分析:假设我们访问:crm.yangcoder.com/system/msg 这个时候nginx转发给apache的是:crm.yangcoder.com/index.php/system/msg 。很明显程序处理不了这个路由。
后来在顺着这个思路在网上找到了一个方法。就是添加如下配置:
1 location / { 2 #设置主机头和客户端真实地址,以便服务器获取客户端真实IP 3 proxy_set_header Host $host; 4 proxy_set_header X-Real-IP $remote_addr; 5 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 6 proxy_set_header X-Forwarded-Protocol $scheme; 7 proxy_set_header PATH-INFO $request_uri; 8 9 #禁用缓存 10 proxy_buffering off; 11 #反向代理的地址 12 proxy_pass http://crm_cluster; 13 14 if ($request_filename ~* ^.*?\.(txt|pdf|doc|xls|xlsx)$){ 15 add_header Content-Disposition: 'attachment;'; 16 17 } 18 }
这样就可以正常访问了。
访问结果如下图:
图1,访问首页,显示请求被转发到了8080端口上。
图2,访问静态资源
3、在同一台电脑上还测试了负载均衡的效果。唯一的问题是,由于项目后台部分,使用了Yii2.0的资源管理,在访问的时候,不同的服务器生成的静态资源路径不统一。导致有时候静态资源加载出现404错误。如果前端要解决该问题,个人觉得可行的方法除了同步多服务器代码文件外,还有就是静态资源文件单独存放。
1 upstream crm_cluster{ 2 server crm.yangcoder.com:8080; 3 server crm.yangcoder.com:81; 4 server crm.yangcoder.com:82; 5 }
4、当然针对当前项目的逻辑而言,这个方案并不是最优解决方案。其实通过分析,我们的瓶颈并不是出现在程序、数据查询上,而是出现在用户同一时间段大量上传图片占用大量上行带宽上。这一方案目前还能支撑住当前访问量,8M带宽,6000+活跃用户在同一时间段内上传图片,统计发现在上午9点到12点之间带宽的上行带宽统计是一条平行线。下一步我们想在目前的基础上介入第三方对象存储和CDN服务,来优化当前方案。
转载于:https://www.cnblogs.com/yangcoder/p/10109629.html
Nginx+Apache Yii2.0 配置方案相关推荐
- nginx 1.14 php,nginx 1.14.0 配置部署 thinkphp 5.1
开始接触NGINX,配置tp5配了半天,找不到具体原因,于是用网上搜索到的配置复制粘贴搞定. 感谢 https://blog.csdn.net/qq_36431213/article/details/ ...
- 修改thinkphp配置nginx服务器,thinkphp5.0配置nginx重写规则
thinkphp5.0配置nginx重写规则 2018年07月06日 09:29:03阅读数:1529 server { listen 80; #端口号 server_name demo.aa.com ...
- nginx 1.14.0 配置部署 thinkphp 5.1
开始接触NGINX,配置tp5配了半天,找不到具体原因,于是用网上搜索到的配置复制粘贴搞定. 感谢 https://blog.csdn.net/qq_36431213/article/details/ ...
- yii2 nginx php配置,求助-yii2在nginx上的rewrite配置
本文讲的是nginx配置yii2.0重写的例子, apache和nginx比起来,我更倾向nginx,占用资源少,且性能高,不管是开发还是生产环境都很好用.那么,如何配置nginx让其支持yii2.0 ...
- 域名邮箱|Yii2.0使用QQ域名邮箱发送邮件
当然是先有域名,我的域名是在腾讯云注册的 http://domain.mail.qq.com/ 点击创建域名邮箱,先登录一个QQ邮箱作为管理员 根据提示操作 完成上面这个,各自注册商方法不一样,一般都 ...
- [转]配置nginx+apache 其中动态由apache处理,静态由nginx处理
转载自: http://blog.lubingit.com/post/86/ 大 | 中 | 小 http://forum.ubuntu.org.cn/viewtopic.php?t=26084 ...
- 阿里云免费SSL证书申请与安装使用-附Nginx,Apache,IIS 6,IIS 8配置SSL教程
大家直接跳转吧:http://www.07net01.com/2017/01/1795676.html 也许是看到了Https是未来发展的大趋势,Symantec 和GeoTrust 两大SSL公司最 ...
- Apache 2.0性能优化—MPM的选择与配置
Apache 2.0性能优化-MPM的选择与配置 谈到Apache,大多数系统管理员对其稳定版1.3印象颇深.虽然Apache 2.0的系列开发版早已由Alpha.Beta发展到现在的GA(Gener ...
- php fpm apache nginx_安装配置Nginx/Apache+PHP-fpm服务环境
最近上了一批debian7的机器,刚好有web项目要上,debian7中已经把php-fpm集成进去了,打算把以前的apache+mod_php模式换成nginx+php-fpm或者apache+ph ...
最新文章
- iOS 关于Blocks
- [20180627]测试bbed是否支持管道命令.txt
- Android之关于Intent的Flag属性的讲解
- 面向对象编程 封装 继承 多态(三大特征)(第三篇)
- SQL Server安装文件挂起错误解决办法
- 硬币找零问题,动态规划基础,百度面试题
- the dhc driver package_DHC智商低?不,它用1k阅读,444个好看证明了自己
- Qt总结之二十二:Qt控件QObject
- C语言——变量篇(一)变量关键字static、auto、extern、register
- jquery扩展 $.fn
- matplotlib绘图(折线图,直方图,柱状图,饼图,散点图,三维,动图)
- Unity外部资源无法拖入Unity
- 1口百兆光纤收发器工业导轨式发送机接收机1百兆光1百兆电工业以太网光纤收发器
- [转贴]馒头的N种吃法
- Visual Assist 配色
- VC中画基准线,随鼠标移动
- 【LeetCode】1905-统计子岛屿
- inventor如何钣金出弧面_Inventor钣金造型教程
- Ubcoin市场:加密货币-商品交易平台
- 微软小娜 服务器连不上网,win10小娜怎么连不上网 win10小娜没反应怎么回事
热门文章
- displaytag 导出
- C++负数、小数如何保存
- map函数的简单用法。
- 计算机 电脑 系统安装教程,安装电脑的操作系统的方法
- java中静态方法可以被继承_关于java:静态方法中的继承
- java 2分钟_java – 为什么我的应用程序启动时间超过2分钟?
- php和架构,结构和架构的区别是什么?
- java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误
- fork() || fork() || fork() 与 fork() fork() fork()
- 初识Linux C线程