架构简介

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 提供。