nginx和php-fpm通信, unix socket还是tcp?

Nginx和Fastcgi( php-fpm是PHP端的Fastcgi实现 )的通信方式有两种,一种是TCP的方式,一种是unix socket方式。 两种方式各有优缺点,这里先给出两种的配置方法,然后再对性能、安全性等做出总结。 TCP是使用TCP端口连接,本地配置: 127.0.0.1:9000 Socket是使用Unix Domain Socket连接套接字,一般以文件形式:/dev/shm/PHP-cgi.sock 很…

Nginx root和alias的区别

root和alias的主要区别是: 使用root,实际的路径就是:root值 + location值。 使用alias,实际的路径就是:alias值。 例如, 有一张图片,URL是:www.awaimai.com/static/a.jpg 它在服务器的路径是:/var/www/app/static/a.jpg 那么用root的配置是: location /static/ { root /var/www/app/; } 用alias的配置就是: location /static/…

如何在Docker的PHP容器用curl请求Nginx容器域名

在维护 DNMP 项目的时候,有同学问道这样一个问题,描述起来大致是, 有 nginx 和 php 两个 docker 容器,其中 nginx 配置了一个 demo.com 的域名,那如何在 PHP 容器中 curl 到nginx配置的 demo.com 域名的数据呢? 如果是放在云服务器上,绑定了公网IP,没问题,直接 curl 就可以。 如果是不用docker的话,也简单,nginx和php在同一台…

Docker启动Nginx容器有entrypoint或command时自动退出解决

问题如标题所示,在升级优化 DNMP的时候,一直遇到这个问题没解决。 后来一遍遍谷歌后才在 reddit(地址在参考资料处) 上找到提示, 再返回Nginx的docker仓库仔细查看说明,其实是有说明的 /捂脸~ 就是在CMD后面加上exec nginx -g 'daemon off;',如下: command: /bin/bash -c "echo 'hello' && exec nginx -g 'daemon off;'…

docker nginx使用acme.sh为网站免费添加https

acme.sh和certbot一样,都是为站点获取、自动更新免费Let's Encrypt证书的工具, 只是和 certbot 相比,acme.sh更加小巧轻便, 基于这一点,用它在Docker Nginx容器中部署站点的https证书再合适不过了。 当然,下面的步骤一样适用非Docker环境的Nginx。 1 安装 首先,进入alpine容器: $ docker exec -it <container_name> /bin/s…

更新alpine Nginx容器中的Let's Encrypt证书(certbot方式)

本文说明如何在Docker的alpine nginx容器中更新https证书, 非Docker容器请参考:使用Let's Encrypt免费为网站加上HTTPS 步骤如下: 1、alpine中安装certbot # apk add --no-cache certbot 2、在alpine容器中执行更新命令: # 使用【默认配置目录】的更新命令 # certbot renew # 使用【自定义配置目录】的更新命令 # certbot renew --co…

使用https,$_SERVER['HTTPS']却不等于on?

目前有两台服务器,都是http和https协议共存。 但是部分程序遇到一些问题,因为PHP中有根据$_SERVER['HTTPS']来设置环境常量。 一台服务器可以拿到值为on,另外一台却是NULL。 一步步排查后才知道,这是个 fastcgi 配置的问题! 解决方法的办法就是Nginx配置加上: fastcgi_param HTTPS $https if_not_empty; 完整配置如下: location ~…

Docker LNMP环境搭建

本文介绍如何使用Docker容器,快速部署LNMP环境。 最终完成的环境我们称为:DNMP(即 Docker + Nginx + MySQL + PHP)。 最终实现一键部署LNMP环境的目的,该环境特点: 完全开源 支持多版本PHP切换(PHP5.4、PHP5.6、PHP7.2...) 支持绑定任意多个域名 支持HTTPS和HTTP/2 PHP源代码位于host中 MySQL data位于host中 所有配置文件可在ho…

Windows后台启动、停止和重启WNMP脚本

WNMP,是PHP开发环境的简称,即在Windows系统下安装Nginx、MySQL、PHP三个软件。 通过DIY安装WNMP后,要一个个启动、停止和重启这几个软件就比较麻烦。 而且PHP FastCGI默认不会后台启动,需要借助 RunHiddenConsole.exe 组件。 那么,用bat脚本来做岂不是更简单? 首先,下载 RunHiddenConsole.exe 下载后,放到安装的WNMP目录下。 然…

WNMP完整教程

WNMP,是PHP开发环境的简称,即在Windows系统下安装Nginx、MySQL、PHP三个软件。 目前有很多一键安装的PHP开发环境,如phpStudy、WAMPServer、UPUPW、XAMPP、APPServ等。 phpStudy界面友好,但是MySQL版本太老。 WAMPServer的MySQL版本新,但是界面垃圾,用了很久不知道怎么开启服务器。 UPUPW版本新,DOS界面操作,介于phpstudy和WAMPS…