分类
服务器部署

在 windows 上编译 nginx,以使用 nginx-rtmp-module 模块

注:这是一个客户需求,本文仅做记录。实际使用中不建议在 windows 上使用 nginx ,因为 windows 上的 nginx 至今还是 select 模型,没有 IOCP ,不堪重负。

操作系统:Windows 7 SP1(虚拟机环境)
编译工具:Visual Studio 2010(主要是使用其编译工具)

准备工作

  • 安装 Strawberry Perl: windows 版本的 perl
    下载地址:https://strawberryperl.com/download/5.32.1.1/strawberry-perl-5.32.1.1-32bit.msi

下载依赖包:pcre,zlib,openssl

pcre 下载地址:https://ftp.pcre.org/pub/pcre/
这里下载的是8.45版本

zlib 下载地址:https://zlib.net/
这里下载的是1.2.11版本

openssl 下载地址:https://www.openssl.org/source/
这里下载的是openssl-1.1.1l版本

因为要用到 rtmp 模块,所以,这里额外下载 rtmp 模块代码
nginx-rtmp-module 下载地址:https://codeload.github.com/arut/nginx-rtmp-module/zip/refs/tags/v1.2.2
下载最新的1.2.2版本

开始编译

打开 mysys2 ,使用 hg 下载最新的 nginx 源代码,执行命令:

hg clone http://hg.nginx.org/nginx

在 nginx 源码目录下新建目录 ojbs/lib ,把下载好的依赖包放到该目录中,如下图:

objs/lib目录下解压好的文件

在 mysys2 中安装编译工具:

pacman -S gcc make

执行如下命令,用来生成 makefile 文件:

auto/configure \
    --with-cc=cl \
    --with-debug \
    --prefix= \
    --conf-path=conf/nginx.conf \
    --pid-path=logs/nginx.pid \
    --http-log-path=logs/access.log \
    --error-log-path=logs/error.log \
    --sbin-path=nginx.exe \
    --http-client-body-temp-path=temp/client_body_temp \
    --http-proxy-temp-path=temp/proxy_temp \
    --http-fastcgi-temp-path=temp/fastcgi_temp \
    --http-scgi-temp-path=temp/scgi_temp \
    --http-uwsgi-temp-path=temp/uwsgi_temp \
    --with-cc-opt=-DFD_SETSIZE=1024 \
    --with-pcre=objs/lib/pcre-8.45 \
    --with-zlib=objs/lib/zlib-1.2.11 \
    --with-openssl=objs/lib/openssl-1.1.1l \
    --with-openssl-opt=no-asm \
    --with-http_ssl_module \
    --add-module=objs/lib/nginx-rtmp-module-1.2.2

执行完成之后,打开 Visual Studio 2010 命令提示行,进入 nginx 源码目录,执行命令:

nmake -f objs/Makefile

接下来就是等待编译完成。

编译完成之后,会提示找不到命令 sed ,不用理会。

编译完成,找不到 sed 忽略即可。

最后,到 objs 目录下找到新鲜出炉的 Nginx.exe 。

编译生成的 nginx

运行

为了让编译后的 Nginx.exe 能运行起来,我们需要到 Nginx 官网下载一个官方编译的压缩包,解压后,把我们生成的 Nginx.exe 替换官方的即可。

官方编译好的 nginx for windows 二进制文件
最终的目录结构。
分类
服务器部署

PHP-FPM和Nginx使用Unix Domain Socket通讯

  • 第一步,创建 unix domain sock 文件
cd /run
mkdir php && cd $_
touch php7.4-fpm.sock
chown www-data:www-data php7.4-fpm.sock
chmod 777 ./php7.4-fpm.sock
  • 第二步,配置 php-fpm
cd /usr/local/php/php74/etc/php-fpm.d
vi www.conf

listen = 127.0.0.1:9074
改为
listen = /run/php/php7.4-fpm.sock

保存后,执行systemctl restart php7.4-fpm重启 php-fpm 。

  • 第三步,配置 nginx
fastcgi_pass 127.0.0.1:9074;
改为
fastcgi_pass unix:/run/php/php7.4-fpm.sock;

保存后,执行nginx -s reload使 nginx 配置生效。

P.S. 可以把 Unix Domain Socket 文件放到 /dev/shm 下以提高性能。因为这个目录不在硬盘上,而是在内存里。

Yet another post script: 这么改完之后,一定记得所有用到这个 PHP-FPM 的站点,nginx 配置都要做如上修改,不然网站就访问不了了。

分类
服务器部署

Debian 10 PHP 7.4编译安装imagick扩展

下载 imagick 源码,解压并进入目录

wget https://pecl.php.net/get/imagick-3.4.4.tgz
tar xf imagick-3.4.4.tgz
cd imagick-3.4.4

安装依赖

apt install -y libmagickcore-dev libmagickwand-dev autoconf

进入 imagick 代码目录后执行 phpize

/usr/local/php/php74/bin/phpize

配置

./configure --with-php-config=/usr/local/php/php74/bin/php-config --with-imagick=/usr/local/imagemagick

编译安装

make && make install

编译安装完成后会显示扩展模块编译到了哪个目录,记录下这个目录的路径,以便在 php.ini 中进行配置,我这里是 /usr/local/php/php74/lib/php/extensions/no-debug-non-zts-20190902/

配置 php.ini

extension_dir = "/usr/local/php/php74/lib/php/extensions/no-debug-non-zts-20190902/"
extension=imagick.so

保存并退出,重启 php-fpm 即可。

分类
服务器部署

CentOS7 升级 Mysql 到 5.7.32

升级mysql服务端

yum update mysql-server

然后升级数据

mysql_upgrade -uroot -p

顺便把客户端版本也升级了

yum update mysql

最后用 SELECT @@version; 查看版本。

注意:我这里是小版本升级,没备份直接升了。如果跨主版本建议先做数据备份再升级。

分类
服务器部署

解决apache内存占用过高的问题

Windows 服务器上的 Apache2.4 占用内存过高,在没有什么请求的情况下,启动服务没一会就占用300多M。

解决办法:

打开httpd.conf,把Include conf/extra/httpd-mpm.conf前面的注释掉去(如下图),重启服务即可。

去掉前面的注释

这样修改后,Apache会使用httpd-mpm.conf里面的配置,当然,也可以在里面进行更精细的调优。重启服务之后,可以看到内存占用是正常的,内存大小随负载的增高而变化。

apache内存占用恢复正常
分类
服务器部署

wordpress更新需要设置FTP的问题

今天在新架一个wordpress网站时,又遇到需要FTP的问题,现在把这个问题总结下,以方便后续使用。

这个问题是网站目录和文件权限以及所有权的问题。执行以下命令即可解决:

// 首先进入网站根目录

// 设置目录权限
find . -type d -print0 | xargs -0 chmod 0755

// 设置文件权限
find . -type f -print0 | xargs -0 chmod 0644

// 设置wp-config.php的权限
chmod 600 wp-config.php

// 把当前目录下所有文件加入php-fpm用户组
chown -R nobody:nobody *

// 最后也要把当前根目录文件夹也加入php-fpm用户组,不然也更新还是会提示需要FPT的
chown -R nobody:nobody .