在实际开发中个人的电脑中经常需要安装 WNMRP、WAMRP、LNMRP、LAMRP等各种开发环境来应对不同的开发需求。

  此篇主要是对WINDOWS系统下 Apache+Nginx + PHP +Mysql + Redis  共存的总结,后续会补上Linux系统下(本机win7+CentOS7.4双系统) 共存的安装步骤。

  要点提示,在这我就不再赘述 每个的安装了,单个安装可以参考以下几篇文章:

  共存存在的问题和解决方案:

  1、PHP 版本如何选择?

  答:TS版和NTS版都需要下载下来安装配置。TS线程安全版是与Apache配合使用的,NTS非线程安全版是配合Nginx 使用。个人建议在本地安装4个版本:5.6.37双版本和最新版(7.2.8)双版本,当然在实际开发需求中PHP7以上的版本使用率要高能多,毕竟有很多新特性可以提升程序的运行效率,但为了考虑兼容的话还是安个5.6的老版本在本地,根据实际的开发切换版本就行(把正常使用的TS版写入系统环境变量中作为默认版本)。

  注意:不同的版本编译的环境可能不一样,有的是vc14编译的有的是vc15编译的,因此最好检查下本地vc的安装情况,把vc14和vc15都安装上。   

  

  2、PHP TS版和NTS版如何配置?

  答:因为为了适应不同的HTTP解析器,因此TS版和NTS版的配置文件也有所差异,但差别并不大。主要区别是nts版需要开启PHP-FPM 来与Nginx共同工作,以下是NTS版需要开启的几个扩展选项

  

;扩展存放的目录
extension_dir = "H:\phpapache\php-7.2.7-nts-x64\ext" ; http://php.net/enable-dl
; 运行运行时配置参数
enable_dl = On ;以下几点是NTS 必须开启的 ; http://php.net/cgi.force-redirect
; 开启CGI模块,一般非线程安全的开启,但改为FAST-CGI 模式,因此参数变为0
cgi.force_redirect = 0 ; http://php.net/fastcgi.impersonate
; 开启 fast-cgi 模式,但需要先开启cgi.force_redirect
fastcgi.impersonate = 1 ; http://php.net/cgi.rfc2616-headers
;告诉PHP在发送HTTP响应代码时要使用哪种类型的标头,->发送Apache和其他Web服务器支持的Status,->将发送符合RFC 2616的标头
cgi.rfc2616_headers = 1 ;常用扩展开启
;extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
extension=mbstring
extension=exif
; exif Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c ; Use with Oracle Database 12c Instant Client
;extension=odbc
extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
;extension=pdo_pgsql
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop ; The MIBS data available in the PHP distribution must be installed.
; See http://www.php.net/manual/en/snmp.installation.php
;extension=snmp ;extension=soap
extension=sockets
;extension=sqlite3
;extension=tidy
;extension=xmlrpc
;extension=xsl ;redis
extension=igbinary
extension=redis ;当然进行调试还需要安装Xdebug扩展

  注意红色标记的地方

  3、Apache 和 Nginx 的冲突怎么解决?如何配置?

  答:首先是端口冲突的问题,根据实际开发情况,哪个经常用到就把哪个的端口改为80端口,另一个可重新改个新端口,如8081(8080端口被本地安装tomcat 占了)。当然同时都用的话,需要在访问的地址后面添加指定的端口号。

  Apache 可以添加进系统服务,比较方便点;Nginx 的话需要手动开关,麻烦了点,因为Nginx需要配合php-cgi才能正常工作。

  以下是nginx.conf的配置文件和部分注解(有些是优化配置)

#user  nobody;
#阻塞和非阻塞网络模型:
#同步阻塞模型:
#一请求一进(线)程,当进(线)程增加到一定程度后cup消耗量较大,性能急剧下降,负载率不高
#nginx基于事件的非阻塞多路复用(epoll或kquene)模型:
#一个进程在短时间内可以响应大量的请求
#建议值 <= cpu 核心数量,一般高于cup数量不会带来好处,容易出现进程切换开销的负面影响
worker_processes ; #将worker_processes 绑定到特定cup上,避免进程在CPU间切换的开销,win平台不支持
#worker_cpu_affinity ;
#8内核4进程 时的设置方式
#worker_cpu_affinity ; #每个进程最大可打开文件描述符数量(Linux下文件描述符比较广义,网络端口,设备,磁盘文件都是)
#文件描述符用完了,新的连接会被拒绝,参数502错误
#Linux最大可打开文件数可通过命令 ulimit -n FILECNT 或 /etc/ecurity/limits.conf配置
#理论值 系统最大数量 /进程数 但进程间工作量并不是平均分配的,所以可以设置大一些
#一般最大打开文件数会是系统内存的10%(以KB来计算)(称之为系统级限制)
worker_rlimit_nofile ; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
#并发响应能力的关键配置
#nginx最大负载量,每个进程允许最大同时连接数 maxConnections = worker_processes * work_connections
#注意:maxConnections 不等同于可响应的用户数量
#因为一般一个浏览器会同时开2条连接,如果反向代理,nginx到后端服务器的连接也要占用连接数
#因此,做静态服务器时,一般 maxClient = work_connections * worker_processes /
#做反向代理服务器时,maxClient = work_connections * worker_processes / #这个值理论上越大越好,但最多可承受多少请求与配件和网络有关
worker_connections ; #指明使用epoll 或kquene (*BSD)
#使用epool 仅用于linux2.6以上内核,可以大大提高nginx的性能
#use epoll; #备注:要达到超高负载下最好的网络响应能力,还需要优化与网络相关的Linux内核参数
} http {
#mime type映射
include mime.types;
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #关闭此项可减少IO开销,但无法记录访问信息,不利于业务风险,一般运维情况不建议使用
access_log off;
#access_log logs/access.log main;
#只记录更为严重的错误日志,可减少IO压力
error_log logs/error.log crit; #启用内核复制模式,应该保持开启以确保达到最快的IO效率
sendfile on; # 缓存发送请求
# 启动如下2项配置,会在数据包达到一定大小后再发送数据
# 这样会减少网络通信的次数,降低阻塞概率,但也会影响响应的及时性
#比较适合于文件下载这类大数据包通信场景
#tcp_nopush on;
#tcp_nodelay on|off on表示禁用Nagle算法 # 最大连接时间
# HTTP1.1支持持久化连接alive
# 降低每个连接的alive 时间可在一定程度上提高可响应的连接数,所以可以适当降低此值(秒)
keepalive_timeout ; # 启动内容压缩,有效降低网络流量
gzip on;
# 过短的内容压效果不佳,压缩过程还会浪费服务器系统资源
gzip_min_length ;
# 可选值 ~ ,压缩级别越高压缩率越高,但对系统的性能要求越高
gzip_comp_level ;
# 压缩的内容类型
gzip_types text/plain text/css application/json application/x-javascript text/xml; # 静态文件缓存
# 最大缓存数量,文件未使用存活期
#open_file_cache max= inactive=20s;
# 验证缓存有效期时间间隔
#open_file_cache_valid 30s;
# 有效期内文件最少使用次数
#open_file_cache_min_uses ; #server 表示一个虚拟主机,一台服务器可配置多个虚拟主机
#重点:server_name 指明域名后需要在系统hosts(C:\windows\system32\drivers\etc)文件中指明改域名指向的ip地址
#Linux 的hosts 文件地址 /etc/hosts
#一个域名对应一个ip ,一个ip可关联多个域名
#rewrite 语法 rewrite <regex> <replacement> [flag];
#rewrite参考 https://www.cnblogs.com/czlun/articles/7010604.html
server {
listen ;
server_name myloc.loc;
rewrite ^/(.*) www.myloc.loc:/$ permanent;
} server {
#修改该端口为8081 避免与tomcat 端口冲突
listen ; #识别的域名
server_name www.myloc.loc; # if ($host =='myloc.loc') {
# rewrite ^/(.*) http://www.myloc.loc:8081/$1 permanent;
# } #charset 默认字符编码,与URL参数乱码问题有关;
charset utf-; #access_log logs/host.access.log main; #一个server下可配置多个location,用来匹配同一域名下不同URI的访问
#root 站点根目录
#index 默认主页
#proxy_pass 转发 后跟系统地址
location / {
root H:/phpapache/www/BookShop;
#index 默认首页
index index.php index.html index.htm;
# deny all; 拒绝请求,返回403
#允许请求
allow all;
# yii rewrite
# try_files $uri $uri/ /index.php?$args;
#支持YII PHAH_INFO 访问
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php last;
}
} #error_page /.html; # redirect server error pages to the static page /50x.html
#
error_page /50x.html;
location = /50x.html {
root html;
} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # 支持PHP设置
location ~ \.php$ {
root H:/phpapache/www/BookShop;
fastcgi_pass 127.0.0.1:; fastcgi_index index.php;
#$document_root 就是指前面“root”所指的站点路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
} # location ~ / {
# root H:/phpapache/www/BookShop;
# index index.php
# fastcgi_pass 127.0.0.1:;
# fastcgi_index index.php;
# #$document_root 就是指前面“root”所指的站点路径
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# include fastcgi_params;
# if (!-e $request_filename) {
# rewrite ^/(.*)$ /index.php last;
# break;
# }
# } } #server bres
server {
#修改该端口为8081 避免与tomcat 端口冲突
listen ; #识别的域名
server_name www.bres.com; # if ($host =='bres.com') {
# rewrite ^/(.*) http://www.bres.com?$1 permanent;
# } charset utf-; #access_log logs/host.access.log main; #一个server下可配置多个location,用来匹配同一域名下不同URI的访问
#root 站点根目录
#index 默认主页
#proxy_pass 转发 后跟系统地址
location / {
root H:/phpapache/www/bres/public;
#index 默认首页
index index.php index.html index.htm;
# deny all; 拒绝请求,返回403
#允许请求
allow all;
#支持PATH_INFO模式访问(TP框架)
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$ last;
break;
}
} #error_page /.html; error_page /50x.html;
location = /50x.html {
root html;
} # 支持PHP设置
location ~ \.php$ {
root H:/phpapache/www/bres/public;
fastcgi_pass 127.0.0.1:; fastcgi_index index.php;
#$document_root 就是指前面“root”所指的站点路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
} location ~ / {
root H:/phpapache/www/bres/public;
index index.php
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
#$document_root 就是指前面“root”所指的站点路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$ last;
break;
}
} } # HTTPS server
#
#server {
# listen ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }

  特别提醒一下:在nginx.conf 中自定义了多个域名的话需要在系统hosts文件中指明改域名指向的是本地,不然的话浏览器会直接进行外网访问,不会访问本地的服务。

  windows下hosts文件在C:\windows\system32\drivers\etc

  Linux 的hosts 文件地址 /etc/hosts

  

  配置完nginx.conf 文件后 在nginx安装目录下 运行cmd 命令: nginx -t 检查配置是否有问题,可根据提示进行修改

  直到显示:ok 、successful 表明配置完成

  

  下面是Nginx+php-cgi 的开启关闭 步骤:

    • 1、下载 RunHiddenConsole【隐藏dos黑窗口工具】 (之前找了下,各种分享的都需要下载豆子,这里免费提供百度云资源:链接:https://pan.baidu.com/s/1WDKg7SfwuT5cCRTfe9AlTw 密码:xhb4)
    • 2、在nginx下新建个管理目录,如console文件夹,把之前下载的RunHiddenConsole文件放进去。准备写2个bat文件进行开启和关闭管理
    • 3、在console文件加下创建start.bat文件,写入以下代码
      @echo off
      REM PHP NTS版的安装目录
      set php_nts_home=H:/phpapache/php-7.2.-nts-x64
      REM Nginx的安装路径
      set nginx_home=H:/phpapache/nginx-1.14.
      REM RunHiddenConsole.exe的存放目录
      set rhc_home=H:/phpapache/nginx-1.14./console REM Windows 下无效
      REM set PHP_FCGI_CHILDREN= REM 每个进程处理的最大请求数,或设置为 windows 环境变量
      set PHP_FCGI_MAX_REQUESTS= echo Starting PHP FastCGI...
      %rhc_home%/RunHiddenConsole.exe %php_nts_home%/php-cgi.exe -b 127.0.0.1: -c %php_nts_home%/php.ini
      REM 注意上面代码中的9000端口号要与nginx的配置文件nginx.conf中fastcgi_pass 参数的端口号对应
      REM 或者写成下面的格式,前提是RunHiddenConsole.exe与该bat文件在同一文件夹下
      REM RunHiddenConsole %php_nts_home%/php-cgi.exe -b 127.0.0.1: -c %php_nts_home%/php.ini echo Starting nginx...
      %rhc_home%/RunHiddenConsole.exe %nginx_home%/nginx.exe -p %nginx_home%
    • 4、在console文件加下创建stop.bat文件,写入以下代码关闭程序进程
      @echo off
      echo Stopping nginx...
      taskkill /F /IM nginx.exe > null echo Stopping PHP FastCGI...
      taskkill /F /IM php-cgi.exe > null
      exit

      执行stop.bat文件后会在console目录下生产一个null空文件,不用管它

    

  配置完毕后点击start.bat 启动nginx和php-cgi ,切换浏览器进行访问测试,如果能正常访问表明配置没有问题,后面根据需求进行 rewrite 重写伪静态配置就好了,详细的配置可参看使用的框架说明,上面的案例中写了YII 和 TP框架的重写规则。

  以下是nginx 1.14 + php7.27-nts  8081 端口的测试访问截图

    

  以下是Apache 2.4 + php7.0.12-ts  80端口的访问测试截图

   

  windows系统下 Apache和Nginx 共同工作的总结先到此告一段落了,后续在开发中遇到的优化配置后再下面持续更新。

  

  待续 ......

Apache+Nginx+php共存(一)的更多相关文章

  1. ***LANMP镜像手册(Apache&Nginx)-lanmp-oneinstack

    LANMP镜像手册(Apache&Nginx) Version PHP7.0.26  转自:http://docs.websoft9.com/xdocs/lanmp-oneinstack-im ...

  2. web服务器【apache/nginx] 关闭目录的浏览权限

    web服务器[apache/nginx] 关闭目录的浏览权限 我的配置(将Options 中的Indexes干掉): <VirtualHost *:80> ServerAdmin webm ...

  3. 为PHP设置服务器(Apache/Nginx)环境变量

    为PHP设置服务器(Apache/Nginx)环境变量 设置环境变量常见的地方为区分开发环境/生产环境,或者定义一些数据库的帐号密码 设置Apache环境变量 指令 设置当前环境变量为DEV SetE ...

  4. ubuntu apache nginx 启动 关闭

    转载自:http://www.comflag.com/2011/05/01/apache-web.htm 电影<社交网络>中,facebook创始人马克.扎克失恋后入侵哈佛大学宿舍楼服务器 ...

  5. apache+nginx 实现动静分离

    apache+nginx 实现动静分离 http://blog.csdn.net/xysoul/article/details/50347971

  6. 主流WEB服务器大对比(Apache,Nginx,Lighttpd)

    一.软件介绍(apache  lighttpd  nginx) 1. lighttpd  Lighttpd 是一个具有非常低的内存开销, cpu 占用率低,效能好,以及丰富的模块等特点. lightt ...

  7. SSL证书部署HTTPS站点Apache/Nginx配置

    SSL证书及HTTPS协议 SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现:1.数据信息在客户端和服务器之间的 ...

  8. WordPress 伪静态规则(IIS/Apache/Nginx)

    不少朋友总是询问 WordPress 如何添加伪静态规则,今天倡萌就总结一下 Apache/Nginx 三种环境下的伪静态规则,希望对大家有所帮助. 检测主机是否支持伪静态的方法:在WP后台 > ...

  9. 攻防环境配置大全(iss/apache/nginx/tomcat/jboss/weblogic)

    一.IIS/apache/nginx/tomcat 介绍 1.asp aspx 只能在微软系统的iis中间件运行 [asp+IIS+access(扩展名为mdb)].aspx+mssql+iis结合, ...

随机推荐

  1. 远心镜头(Telecentric lens)原理介绍

    远心镜头(Telecentric lens)原理介绍 远心镜头(Telecentric lens),是为纠正传统镜头视差而设计,它可以在一定的物距范围内,使得到的图像放大倍率不会变化,简单的说这种镜头 ...

  2. mysql无法应用安全设置的解决方法

    如果重复安装mysql,可能会导致这个错误,所以需要: 卸载mysql,把mysql的安装目录彻底删除,默认是    C:\Program Files\MySQL 删除后重新安装即可成功

  3. 菜鸟vimer成长记——第2.2章、visual模式

    vi是没有可视模式的.然而大多数编辑软件都都是有可视模式.所以我猜测vim是几乎迫于无奈才有了visual模式. 个人建议,能不用就不用.这样能直接在头脑里处理好文本,锻炼文本处理能力,同时能转变过来 ...

  4. python+appium 实现qq聊天的消息,滑动删除聊天消息

    有人问我,appium怎么去删除qq聊天的, 当时想到的是滑动, 可是具体的大概有个思路,于是乎,就想自己来实现下, 打开模拟器,开发者选项,找到显示坐标的 然后去打开qq获取要删除的消息的坐标后, ...

  5. (转)为什么所有浏览器的user-agent都是Mozilla

    最早的时候有一个浏览器叫NCSA Mosaic,把自己标称为NCSA_Mosaic/2.0 (Windows 3.1),它支持文字显示的同时还支持图片,于是Web开始好玩起来. 然后出现了一个新的网页 ...

  6. 《杜增强讲Unity之Tanks坦克大战》8-子弹碰撞处理

    8 子弹碰撞处理 为了处理子弹打到坦克的伤害我们在这里新建一个Shell.cs 子弹有两种情况,碰到坦克炸开,没有碰到坦克则过2s子弹销毁. void Start () { Destroy (game ...

  7. Shader食谱 Chapter3--Toonshader卡通效果

    Shader食谱 Chapter3--Toonshader卡通效果 unity shader toon 卡通Shader  Shader食谱 Chapter3--Toonshader卡通效果 Over ...

  8. 网格系统-bootStrap4常用CSS笔记

    .row 定义一行 .col 均分列数,最多一行12列.每列左右间隙各15px .col-{1到12} 定义在所有屏幕下的列宽 .col-{sm|md|lg|xl}-{1到12} 定义在指定屏幕下该列 ...

  9. 使用过滤器解决JSP页面的乱码问题

    乱码详情  总结:讨论了使用GET和POST方法,控制台和JSP页面显示的问题. 最终发现:在servlet或者过滤器中添加:request.setCharacterEncoding("ut ...

  10. oozie捕获标准输出&异常capture-output

    对于普通的java-action或者shell-action 都是支持的只要标准输出是"k1=v1"这中格式的就行: 现用test.py进行测试: ##test.py #! /op ...