Rootop 服务器运维与web架构

2019-12-10
发表者 Venus
关于php中的opcache缓存已关闭评论

关于php中的opcache缓存

opcache 参数配置及解释:
参考 https://www.cnblogs.com/lamp01/p/8985068.html
opcache 原理及缓存哪些代码:
参考 https://www.awaimai.com/2684.html

opcache在php7.0之前需要单独安装,之后自带。

php.ini几个主要配置:

# 开启缓存,默认此行已经注释掉,默认为开启状态,0为关闭。
opcache.enable=1
# 检查文件是否更新,0为不检查,表示为一直不过期,即使更新代码也不变,除非重启服务或手动刷新。
opcache.validate_timestamps=1
# 缓存过期时间,单位秒
opcache.revalidate_freq=60

即:validate_timestamps=1时,则会在revalidate_freq=60秒后再去检查脚本是否变化,如有变化则更新缓存。
更多的配置参数查看上面链接。

ps:
opcache的相关配置参数状态可以通过phpinfo()函数获取。

测试效果,创建个1.php:
这里直接返回一个字符串。

<?php
echo 'aaa';

然后用浏览器访问后返回aaa,再去修改php文件

<?php
echo 'aaabbb';

浏览器刷新,依旧是显示aaa,表明opcache生效,60秒后访问才变为aaabbb。

之所以测试这个opcache功能是因为有群友问苹果cms后台添加内容后,前端页面不显示添加的内容。
需要过一段时间后才出现。查资料说是opcache导致的。
怀疑是此cms自己生成了前端缓存页面,比如xxx.php做为前端的缓存,不用每次生成,后台更新后,xxx.php虽然更新了,但是opcache缓存还没刷新导致。

2019-12-09
发表者 Venus
关于hls访问m3u8(HTTP Live Streaming)变成下载的问题整理已关闭评论

关于hls访问m3u8(HTTP Live Streaming)变成下载的问题整理

hls是基于http协议的流媒体,在移动端中可以直接播放,测试包括QQ,安卓下的chrome、安卓下的搜狗浏览器都可以直接播放m3u8视频。


但是接到反馈,另一台机器上的m3u8在移动端访问变成下载,而不是直接播放。

通过查看返回的响应头中content-type 为 application/octet-stream


这是mime中默认的,在找不到相对应的content-type时,nginx会返回默认的content-type类型。
正常来说需要返回application/vnd.apple.mpegurl才是正确的。这样才能支持移动端直接播放。

这里加了个location,再添加个文件类型

location /hls
{
	add_header 'Access-Control-Allow-Origin' '*';
	add_header 'Access-Control-Allow-Credentials' 'true';
	add_header 'Access-Control-Allow-Methods' 'GET';
	add_header 'Cache-Control' 'no-cache';
	
	types
	{
		application/vnd.apple.mpegurl m3u8;
		video/mp2t ts;
	}
}

mime介绍:
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
服务器(nginx)会根据客户端请求的资源文件扩展名,然后去对照mime.types文件找对应的content-type,在响应头中返回给客户端。
自己添加一条mime测试一下。

root@rootop:/home/software/openresty/nginx/conf# vi mime.types
types {
	· 略过已有配置
	application/user_define_type		     rootop;
}

在网站根目录下创建一个1.rootop文件,浏览器访问,查看响应头。

2019-12-02
发表者 Venus
apache 与 php-fpm 几种处理方式已关闭评论

apache 与 php-fpm 几种处理方式

查了下apache和php-fpm结合的几种方式,记录一下。

csdn资料:https://blog.csdn.net/qq_21956483/article/details/82847744
apache官网文档:https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html

# 1、SetHandler 方式
# php-fpm监听socket文件

<FilesMatch \.php$>
	SetHandler "proxy:unix:/tmp/php-fpm.sock|fcgi://localhost"
</FilesMatch>

# php-fpm监听端口

<FilesMatch \.php$>
	SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

# 2、ProxyPassMatch方式 需要在每个 “VirtualHost” 里面加入

<VirtualHost *:80>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/your/documentroot/$1
DirectoryIndex /index.php
</VirtualHost>

# 3、ProxyPass方式 跟ProxyPassMatch 类似 ,需要在每个 VirtualHost 中分别设置

<LocationMatch ^(.*\.php)$>
ProxyPass fcgi://127.0.0.1:9000/path/to/webroot/
ProxyErrorOverride on
</LocationMatch>

2019-11-26
发表者 Venus
php安装mssql扩展已关闭评论

php安装mssql扩展

# 关于freetds编译时with-tdsver参数
# 参考:https://www.freetds.org/userguide/choosingtdsprotocol.htm
# 在FreeTDS 1.1版本之后,可以设置为auto,版本之前需要手动指定。
以前写过mssql模块安装,这次只是补充编译freetds时指定with-tdsver参数
1、下载freetds及php源码包

[root@VM_0_11_centos ~]# wget -c ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.1.21.tar.gz
[root@VM_0_11_centos ~]# wget -c http://museum.php.net/php5/php-5.2.17.tar.gz

2、安装freetds
# 解压freetds源码包

[root@VM_0_11_centos ~]# tar zxvf freetds-1.1.21.tar.gz
[root@VM_0_11_centos ~]# cd freetds-1.1.21/

# 开始编译安装

[root@VM_0_11_centos ~]# ./configure --prefix=/usr/local/freetds --with-tdsver=7.3 --enable-msdblib
[root@VM_0_11_centos ~]# make && make install

3、编译mssql模块
# 解压php源码包

[root@VM_0_11_centos ~]# tar zxvf php-5.2.17.tar.gz 

# 进入mssql扩展目录

[root@VM_0_11_centos ~]# cd php-5.2.17/ext/mssql/

# 生成configure

[root@VM_0_11_centos mssql]# /www/server/php/52/bin/phpize 

# 开始编译

[root@VM_0_11_centos php-5.2.17]# ./configure  --with-php-config=/www/server/php/52/bin/php-config --with-mssql=/usr/local/freetds
[root@VM_0_11_centos php-5.2.17]# make && make install

4、编辑php.ini文件,加入mssql扩展,在 491 行下面添加(如果不会用vi编辑器,可直接将文件下载改完再传上去)

[root@VM_0_11_centos ~]# vi /www/server/php/52/etc/php.ini
extension_dir = "/www/server/php/52/lib/php/extensions/no-debug-non-zts-20060613/"
extension = mssql.so # 新增行

保存退出,重启php或者重启服务器。

2019-11-26
发表者 Venus
nodejs项目启动报错 cannot find module ‘ipaddr.js’已关闭评论

nodejs项目启动报错 cannot find module ‘ipaddr.js’

用pm2 start /www/project 启动项目提示错误
用pm2 logs project查看报 cannot find module ‘ipaddr.js’错误

以为是没有ipaddr.js这个文件,find搜索了下,项目目录里面是有的。

1、尝试npm install安装依赖,此方法未解决。

2、删除项目下的node_modules文件夹并清除缓存:

rm -rf node_modules
npm cache clean --force
npm install

启动:

pm2 start project

这样问题才解决。