安装 LNMP 环境遇到的几个问题和解决方法

之前的 ECS 明天要到期了,今天买了个新服务器花了半天时间安装 LNMP 环境。之前是直接用的镜像市场里的现成环境,这次自己手动安装遇到了不少问题,在这里记录下。

MySQL said: Lost connection to MySQL server at 'reading initial communication packet', system error: 0

问题描述:

使用 Sequel Pro 无法通过 SSH 方式连接数据库。

解决方法:

官网 FAQ 给出的解决方法是编辑 /etc/my.cnf 注释掉 skip-networking。但我的这个文件里根本没这句话。继续 Google,最终找到解决方法:编辑 /etc/ssh/sshd_config,设置 AllowTcpForwardingyes

在您保存修改前,您需要将此文件设置为可写。

问题描述:

WordPress 无法在后台在线编辑主题文件;WP Super Cache 罢工。

解决方法:

根据官方文档,运行了 chmod -R 755 wp-contentchown -R nginx:nginx wp-content 都不行。接着搜,终于在这里找到答案,需要把 php-fpm 的运行用户设置为和 nginx 的运行用户一致,也就是说要修改 /etc/php-fpm.d/www.confusergroup 值从 apache 改为 nginx

HTTP/2 在 Chrome 上没起作用

问题描述:

NGINX 配置里启用了 HTTP/2,通过 Safari 访问显示为 HTTP/2,但是在 Chrome 浏览器上看还是使用 HTTP/1.1。

解决方法:

搜索了一通后得知,HTTP/2 有 NPN 和 ALPN 两种协商方式,但 Chrome 51 开始移除了对 NPN 的支持。而 ALPN 从 OpenSSL 1.0.2 开始才支持,而通过 yum 安装的 NGINX 编译时使用的是 OpenSSL 1.0.1e-fips。所以除非通过其它方式自己手动编译,不然现在只有 Safari 还支持 NPN 方式。

This service allows sftp connections only.

问题描述:

配置了 SFTP 后,无法通过 SSH 登录了。

解决方法:

根据这篇文章,问题是因为我之前给 /etc/ssh/sshd_config 设置了 ForceCommand internal-sftp 导致,注释掉这句即可。

send-mail: fatal: parameter inet_interfaces: no local interface found for ::1

问题描述:

邮件发不出去。

解决方法:

搜到这篇文章,编辑 /etc/postfix/main.cf,修改 inet_protocols 值为 ipv4

postfix/smtp: Connection timed out

问题描述:

邮件发送超时。

解决方法:

阿里云默认不开放 25 端口,我使用的是网易邮箱,所以改用了 SSL 协议端口 994。

connect() to unix:/var/run/php-fpm.sock failed (13: Permission denied) while connecting to upstream

问题描述:

网页 502 错误,查看错误日志显示是权限问题。

解决方法:

在 Stackoerflow 上找到了解决方法:编辑 /etc/php-fpm.d/www.conf,找到类似下面的几行,把nobody 改为 nginx 运行用户并取消注释。

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

或者直接更改 php-fpm.sock 的文件所有者也行(chown nginx:nginx /var/run/php-fpm.sock)。

InnoDB: Fatal error: cannot allocate memory for the buffer pool

问题描述:

MySQL 经常自己崩溃,看日志好像是内存不足的问题。

170928 16:36:11 mysqld_safe Number of processes running now: 0
170928 16:36:11 mysqld_safe mysqld restarted
170928 16:36:11 InnoDB: The InnoDB memory heap is disabled
170928 16:36:11 InnoDB: Mutexes and rw_locks use GCC atomic builtins
170928 16:36:11 InnoDB: Compressed tables use zlib 1.2.7
170928 16:36:11 InnoDB: Using Linux native AIO
170928 16:36:11 [Note] /usr/libexec/mysqld (mysqld 5.5.56-MariaDB) starting as process 28456 ...
170928 16:36:11 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
170928 16:36:11 InnoDB: Completed initialization of buffer pool
170928 16:36:11 InnoDB: Fatal error: cannot allocate memory for the buffer pool
170928 16:36:11 [ERROR] Plugin 'InnoDB' init function returned error.
170928 16:36:11 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
170928 16:36:11 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
170928 16:36:11 [ERROR] mysqld: Out of memory (Needed 96681984 bytes)
170928 16:36:11 [Note] Plugin 'FEEDBACK' is disabled.
170928 16:36:11 [ERROR] Unknown/unsupported storage engine: InnoDB
170928 16:36:11 [ERROR] Aborting

解决方法:

看了这几个帖子(1/2/3/4),解决方案有三:

  1. 加内存。
  2. 添加 swap 分区。
  3. innodb_buffer_pool_size 改小点。(编辑 /etc/my.cnf,添加到 [mysqld]下面)

3 条评论

发表评论

*