🤣
作者归档:杨龙
Nginx + PHP-FPM 边运行边输出
<?php
//apache方法,需要关闭apache缓冲区
for($i=0;$i<1000;$i++){
echo $i;
ob_flush();//刷新PHP自身缓冲区
flush();//刷新(特指apache)web服务器的缓冲区,输出数据
sleep(1);
}
//nginx缓冲区
ob_end_clean(); // 关闭默认的缓冲区 ob_end_flush() 也可以
ob_implicit_flush(); // 打开绝对刷送
header('X-Accel-Buffering: no'); // 告诉nginx直接输出
# 以上3个一起组合即可实现直接输出
for($i=0;$i<1000;$i++){
echo $i;
sleep(1);
}
nginx超时配置参见:
感谢仙士可 http://www.php20.cn/article/159
- X-Accel_Redirect : 由上游服务指定nginx内部重定向 控制请求的执行
- X-Accel-Limit-Rate: 由上游设置发往客户端速度限制 等同于limit_rate指令
- X-Accel-Buffering:由上游控制是否缓存上游的响应
Sets the proxy buffering for this connection. Setting this to “no” will allow unbuffered responses suitable for Comet and HTTP streaming applications. Setting this to “yes” will allow the response to be cached. - X-Accel-Charset:由上游控制 Content-Type中的Charset
nginx的worker_processes优化
PHP 7.4 Call to undefined function imagecreatefromjpeg()
重新编译php
编译时加上 –with-jpeg 选项
一定要 make clean
Linux 快速开启虚拟内存
mkdir /var/swap # 创建目录
cd /var/swap # 进入目录
dd if=/dev/zero of=/var/swap/swapfile bs=1M count=1024 # 分配个1024*1M的文件
chmod 600 swapfile # (推荐)修改权限为 0600
mkswap swapfile # 格式化为交换区格式
swapon /var/swap/swapfile # 开启交换区
/etc/fstab
添加下列行 实现开机自动挂载(可选)
/var/swap/swapfile swap swap defaults 0 0
Type=simple,systemctl service demo
[Unit]
Description=The swoole HTTP server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
ExecStart=/usr/local/bin/xxx 123
[Install]
WantedBy=multi-user.target
HTTP1.0和HTTP1.1的区别
1、HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。HTTP 1.1则支持持久连接Persistent Connection, 并且默认使用persistent connection. 在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行. 更加多的请求头和响应头(比如HTTP1.0没有host的字段).在1.0时的会话方式:
1. 建立连接
2. 发出请求信息
3. 回送响应信息
4. 关掉连接HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。 HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。
2.HTTP 1.1增加host字段在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。
3、100(Continue) Status(节约带宽)HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。
4、HTTP/1.1中引入了Chunked transfer-coding来解决上面这个问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。
5、HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。
docker 启动MySQL5.6,并映射数据、端口和配置文件
docker run --name mysql56 -v /mnt/mysql56:/var/lib/mysql -v /mnt/mysql56confd:/etc/mysql/conf.d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
# 说明 映射到真机3308端口
# 数据文件存放在/mnt/mysql56下
# 配置文件映射到/mnt/mysql56confd 需要修改的配置在这个文件夹新建配置文件即可
docker run –name xx_mysql -v D:\mysql\xx\data:/var/lib/mysql -v D:\mysql\xx\conf.d:/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 –restart always -d mysql:8
你可能想直知道conf.d文件夹默认是啥,其实基本啥也没有
root@705c5d2e3dfc:/etc/mysql/conf.d# ls -al
total 12
drwxr-xr-x 2 root root 62 Nov 21 01:23 .
drwxr-xr-x 4 root root 94 Nov 21 01:23 ..
-rw-r–r– 1 root root 43 Nov 21 01:23 docker.cnf
-rw-r–r– 1 root root 8 Jul 9 2016 mysql.cnf
-rw-r–r– 1 root root 55 Jul 9 2016 mysqldump.cnf
root@705c5d2e3dfc:/etc/mysql/conf.d# cat docker.cnf[mysqld]
skip-host-cache
skip-name-resolve
root@705c5d2e3dfc:/etc/mysql/conf.d# cat mysql.cnf[mysql]
root@705c5d2e3dfc:/etc/mysql/conf.d# cat mysqldump.cnf[mysqldump]
quick
quote-names
max_allowed_packet = 16M
root@705c5d2e3dfc:/etc/mysql/conf.d#
load pubkey ***: invalid format
这个是因为私钥目录里没有对应的公钥导致的,使用类似下面的方法生成下公钥即可
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub
Composer Installation – Windows
Using the Installer#
This is the easiest way to get Composer set up on your machine.
Download and run Composer-Setup.exe. It will install the latest Composer version and set up your PATH so that you can call composer
from any directory in your command line.
Note: Close your current terminal. Test usage with a new terminal: This is important since the PATH only gets loaded when the terminal starts.
Manual Installation#
Change to a directory on your PATH
and run the installer following the Download page instructions to download composer.phar
.
Create a new composer.bat
file alongside composer.phar
:
Using cmd.exe:
C:\bin> echo @php "%~dp0composer.phar" %*>composer.bat
Using PowerShell:
PS C:\bin> Set-Content composer.bat '@php "%~dp0composer.phar" %*'
Add the directory to your PATH environment variable if it isn’t already. For information on changing your PATH variable, please see this article and/or use your search engine of choice.
Close your current terminal. Test usage with a new terminal:
C:\Users\username>composer -V
Composer version 1.0.0 2016-01-10 20:34:53