架构简介
Client -> Squid(反向代理) -> Nginx(反向代理) -> php-fpm(后端服务)
服务地址及端口
squid : 192.168.1.101:80
nginx: 192.168.1.102:8080
php-fpm: 192.168.1.103:9000
Squid
配置
修改 /etc/squid/squid.conf :
http_port 80 accel defaultsite=192.168.1.101 no-vhost
cache_peer 192.168.1.102 parent 8080 0 no-digest no-query originserver
打开 80 端口
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --reload
校验配置文件
$ sudo squid -k parse
初始化缓存目录
$ sudo squid -z
重启 squid
$ sudo systemctl restart squid
Nginx
配置
Nginx 只负责提供静态文件,对 PHP 文件的请求,则会转发给 PHP 服务器。
- nginx: 192.168.1.102:8080
- nginx root: /var/www/html/
- php-fpm: 192.168.1.103:9000
- php-fpm root: /var/www/shit/
Nginx 服务器中,/var/www/html/ 目录中只有静态文件会被解析,即使有 PHP 文件也不会被解析。
server {
listen 8080;
server_name 192.168.1.102;
index index.php index.html index.htm;
root /var/www/html;
location / {
root /var/www/html;
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 192.168.1.103:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/shit$fastcgi_script_name;
include fastcgi_params;
if ($request_uri ~ "^(.*)(\?.*)$") {
set $path_info $1;
}
fastcgi_param PATH_INFO $path_info;set $path_info $request_uri;
}
}
检验配置
$ sudo nginx -t
重启 Nginx
$ sudo systemctl restart nginx
或重新加载配置:
$ sudo nginx -s reload
SELinux 设置
让 SELinux 为网页流量放行:
$ sudo semanage permissive -a httpd_t
PHP-FPM
配置
PHP 服务器中,所有的 PHP 文件应该放在 /var/www/shit/ 目录中。
/etc/php-fpm.d/www.conf
user = nginx
group = nginx
listen.owner = nobody
listen.group = nobody
listen.mode = 0660
listen = 192.168.1.103:9000
# ^^^^^^^^^^^^^^^^^^
listen.allowed_clients = 127.0.0.1,192.168.1.102,192.168.1.101
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^
为了方便,这里让 PHP 使用的是 nginx 用户。可以手动创建一下:
$ sudo useradd --system -d /var/www/shit --user-group -s /sbin/nologin nginx
重启服务:
$ sudo systemctl restart php-fpm
测试
在 Nginx 服务器放置静态文件
把 nginx 自带的静态文件复制到根目录中,并修改所有者。
$ sudo mkdir -p /var/www/html
$ sudo cp /usr/share/nginx/html/* /var/www/html
$ sudo chown -R nginx:nginx /var/www/html
有兴趣可以尝试在此目录中创建 PHP 文件,然后去访问,看是否会解析。
在 PHP 服务器创建动态文件
$ sudo vi /var/www/shit/test.php
<?php phpinfo(); ?>
访问测试
静态文件:http://192.168.1.101
内容由 Nginx 服务器中的 /var/www/html/index.html 提供。
动态文件:http://192.168.1.101/test.php
内容由 PHP 服务器中的 /var/www/shit/test.php 提供。