鉴于这里为延时FastCGI模块,所以直接从配置FastCGI服务器开始讲起:
php服务器配置:
1、为php提供配置文件:
1
|
# cp php.ini-production /etc/php.ini
|
2、为php-fpm提供Sysv init脚本,并添加至服务列表。
1
2
3
4
|
# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on
|
3、为php-fpm提供配置文件。
1
|
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
|
4、编辑php-fpm的配置文件:
1
|
# vim /usr/local/php/etc/php-fpm.conf
|
配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):
1
2
3
4
5
|
pm.max_children = 150
pm.start_servers = 8
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pid = /usr/local/php/var/run/php-fpm.pid
|
另为了方便查看php-fpm的启动、停止的状态信息,仍需要做如下配置:
1
2
|
[ -f /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions
daemon $php_fpm_BIN --daemonize $php_opts(只是添加一个daemon)
|
接下来就可以启动php-fpm了:
1
|
# service php-fpm start
|
使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):9000
1
|
# ps aux | grep php-fpm
|
整合nginx和php5:
1、编辑/etc/nginx/fastcgi_params文件,将如下行的内容放到最前面。否则报错。
1
2
3
|
# vim /etc/nginx/fastcgi_param
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
|
2、编辑nginx的主配置文件修改为如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
location / {
root /web/htdocs;
index index.php index.html index.htm;
}
locaiton ~* \.php$ {
root /web/htdocs;
fastcgi_pass 172.16.100.1:9000;
如果只是为本机提供FastCGI,IP地址可以为127.0.0.1。
但是如果FastCGI为独立主机,服务就必须监听在外网地址上。
而且静态服务器上和动态服务器都必须有相同的root目录。
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
这里是为FastCGI传递参数用的。
这里"$document_root"默认是"/script",需要修改。
include fastcgi_params;
|
3、添加php测试页面
1
2
3
4
5
6
|
# cat > /web/htdocs/index.php < >
>
> phpinfo();
> ?>
> EOF
|
4、重启nginx服务器,并测试
1
2
|
# service nginx restart
# elinks http://172.16.100.1/index.php
|
nginx支持https:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
须同时添加http支持:
server {
listen 172.16.100.1:80;
server_name www.yh.com;
location / {
root /web/htdocs;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /web/htdocs;
fastcgi_pass 172.16.100.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
添加https支持:
server {
listen 443;
server_name www.yh.com;
ssl on;
ssl_certificate /etc/nginx/nginx.crt;证书路径
ssl_certificate_key /etc/nginx/nginx.key;私钥路径
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /web/htdocs/;
index index.html index.php index.htm;
}
需要同时添加FastCGI服务,否则https不支持php文件:
location ~ \.php$ {
root /web/htdocs;
fastcgi_pass 172.16.100.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_param HTTPS on;需要添加此行内容
}
}
|
下面继续写nginx的配置
反向代理模块:
ngx_http_proxy_module
核心代码是"proxy_pass http://URL"或者是"proxy_pass http://upstream_name",用于实现将用户请求的URI发至上游服务器的某个URI。这里的关键字是"proxy_pass http://" 。
1
2
3
4
|
Syntax:proxy_pass URL;
Default:—
Context:location, if in location, limit_except
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
第一种情况:
location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
注意:当/name和/remote是不同的URI名称时,/name可能只是一个不存在的URI,无意义
即客户端请求会被代理至http://IP/remote,nginx会自动处理映射关系。第二种情况:
location /some/path/ {
proxy_pass http://127.0.0.1;
}
注意:当http://IP后面没有任何内容时(即使是"/"),/some/path/会自动传递到其后。
即请求被代理至http://127.0.0.1/some/path/
第三种情况:
location ~* \.html$ {
proxy_pass http://172.16.100.1;
proxy_set_header x_forwarded_for $remote_addr;
}
注意:不同于第一、二两种情况,
当location使用模式匹配时,http://172.16.100.1后面绝对不能跟任何东西。
因为被模式匹配的内容会被自动添加到后面,不是映射了。也就是客户端请求被代理到
http://172.16.100.1/(.*)\.html$
所以后端服务器必须也具有模式中的目录或文件。
这里添加的头部信息记录的客户端IP,是返回给后端服务器记录客户端IP的。
而add_header是让客户端看到代理服务器的IP的。
|
上面讲述的是静态html的代理,而如果想要代理FastCGI请求,则可以使用"fastcgi_pass address:9000"或者"fastcgi_pass upstream_name",这些内容在"ngx_http_fastcgi_module"中可以看到帮助文档。
动静分离实验:
nginx作为代理服务器,使得客户端访问动态内容和静态内容分别发送到不同的服务器上。
实验环境:
静态服务器IP:172.16.100.15
动态服务器IP:172.16.100.1
nginx代理服务器IP:172.16.100.17
环境配置:
1、静态服务器只需要在日志格式中添加"http_x_forward_for"参数,这样子方便记录查看客户端的访问情况。
2、nginx代理服务器上配置:
1
|
|