PHP 7.2
安装
安装依赖仓库
sudo yum install epel-release
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
安装 PHP
安装 PHP 及常用模块,包括 php-gd 以及 php-fpm。
$ sudo yum --enablerepo="remi-php72" install -y \
php php-common php-opcache php-mcrypt php-cli php-gd php-curl php-mysqlnd php-fpm
检查版本
检查是否安装成功:
$ php -v
PHP 7.2.9 (cli) (built: Aug 15 2018 09:19:33) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.9, Copyright (c) 1999-2018, by Zend Technologies
修改安全配置:
PHP 在找不到完全匹配的 PHP 文件时,默认会尝试最接近的文件。该特性容易被利用,以向请求中插入恶意代码。
$ sudo vi /etc/php.ini
cgi.fix_pathinfo=0
配置 PHP 与 Apache 工作
直接重启 Apache 就可以直接使用了:
$ sudo systemctl restart httpd
配置 PHP 与 Nginx 工作
要提前把 Nginx 安装好,以便自动创建 nginx 用户,在下面的配置中会用到该用户。
修改 PHP 配置
$ sudo vi /etc/php-fpm.d/www.conf
...
user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
启动 PHP FPM
修改之后,可以激活并启动 PHP FPM 守护进程了:
$ sudo systemctl enable php-fpm
$ sudo systemctl start php-fpm
修改 Nginx 配置
修改 Nginx 的虚拟服务器配置,以便 Nginx 有能力处理 PHP。
$ sudo vi /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name server_domain_name_or_IP;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
测试 Nginx 配置文件的语法是否正确:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重新加载 Nginx 配置
$ sudo nginx -s reload
测试
在 Nginx 根目录创建一个 PHP 文件,然后访问配置的域名或地址。
$ sudo vi /usr/share/nginx/html/index.php
<?php phpinfo(); ?>
Apache
找出访问量最大的 5 个 IP 地址
从 apache 的日志 access.log 中,统计访问量最多的 5 个 IP 地址。
$ cat /var/log/httpd/test-access.log \
| awk '{print $1}' \
| sort \
| uniq -c \
| sort -rn \
| head -5
限制 apache 每秒新建连接数为 1,峰值为 3
每秒新建连接数需要用 iptables 来控制:
$ sudo iptables -A INPUT -d 192.168.1.10 -p tcp --dport 80 -m limit --limit 1/second -j ACCEPT
峰值就是 apache 同时可以处理的最多连接数,需要修改 apache 的配置文件 /etc/httpd/conf/httpd.conf:
MaxRequestWorkers 3
超过该限制之后,尝试建立的新连接,会进入等待队列,直到其它子进程被释放。
Nginx
安装
$ sudo yum install nginx
重新加载配置:
$ sudo nginx -s reload
手动添加 nginx 用户
$ sudo useradd --system -d /var/www/html --user-group -s /sbin/nologin nginx
Nginx 作为反向代理时,如何在日志中保存访客的真实 IP 地址?
修改对应的 Nginx 配置文件:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
$ sudo nginx -s reload
FTP
解释 FTP 的主动模式和被动模式
主动还是被动是从 服务端的角度 来说的。主动模式中数据连接是由服务端发起的,而被动模式中则是由客户端发起的。
主动模式
- 客户端从端口 C 连接到服务器端口 21,告知服务器自己的数据端口为 C+1;
- 服务器从端口 21 返回应答消息,控制连接建立;
- 服务器从端口 20 连接到客户端端口 C+1;
- 客户端返回应答消息,数据连接建立。
被动模式
- 客户端从端口 C 连接到服务器端口 21,告知服务端自己使用 被动模式;
- 服务端返回应答消息,并告知自己数据端口号 S,控制连接建立;
- 客户端从 C+1 端口连接到服务器 S 端口;
- 服务端返回应答消息,数据连接建立。
概念
LVS、Nginx、HAproxy 有什么区别?如何选择?
这三种软件均可以实现负载均衡。
LVS
Linux Virtual Server,负载均衡软件。
- 基于四层的转发
- 只能做端口的转发
- 抗负载能力强,适于并发量大的场景
- 工作稳定,自身有完整的双机热备方案
- 应用范围比较广,可以对所有应用做负载均衡
- 需要向 IDC 多申请一个 IP 来做 Virtual IP,因此需要一定的网络知识
Nginx
WEB 服务器,缓存服务器,反向代理服务器,多功能软件。
- 基于七层的转发,可以做基于 URL 和目录的转发
- 对网络的依赖比较小
- 安装和配置比较简单
- 可以承担较高的负载,可支撑超过 1 万次的并发
- 不支持 session 的保持
HAproxy
专业的代理服务器。
- 基于七层的转发
- 可以做基于 URL 和目录的转发
- 适于普通并发量的场景
- 支持 session 的保持
选择
随着网站规模的提升根据不同的阶段来使用不同的技术:
第一阶段:
利用 Nginx 或者 HAProxy 进行单点的负载均衡,这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是仍然规模较小,没有专业的维护团队来进行维护,也没有需要进行大规模的网站部署。
上手快,配置简单,在七层上利用 HTTP 协议就可以实现。
第二阶段:
随着网络服务进一步扩大,单点的 Nginx 已经无法满足,此时使用 LVS 或商用 F5 是选。Nginx 是作为 LVS 或 F5 的节点来使用。
第三阶段:
随着网络服务成为主流产品,公司知名度进一步扩展,相关人才的能力以及数量也随之提升,这时无论从开发适合自身产品的定制考虑,还是从降低成本考虑,开源的 LVS 为首选。
最终形成比较理想的状态为:F5/LVS <—> Haproxy <—> Squid/Varnish <—> AppServer。
Squid、Varinsh 和 Nginx 有什么区别,如何选择?
Squid、Varinsh 和 Nginx 都是可以用来提供网站缓存服务。
Squid
- 专业的缓存软件
- 技术资料丰富
Varnish
- 专业的缓存软件
- 采用了可视化页面缓存技术,较高的技术优势
- 内存缓存,速度一流
- 因为是内存缓存,容量有限制
- 有强大的管理端口,可以使用正则表达式快速、批量地清除部分缓存
Nginx
- Nginx 是 WEB 服务器,使用第三方模块才可以提供缓存服务
- 只能缓存静态文件
选择
优先选择专业的缓存服务 squid 或 varnish。