说说这样一个状况,还是用图吧,文字说不清。图中的一点就是路由器的88端口可转发到88,也可以是80。问题来了,倒地该转发到哪一个比较好。
现在做这样的配置,在树莓派上面,监听88端口过来的请求,也就是在路由器上有88端口直接转发到88端口,这样通过mypi.loveyu.me:88访问就不会有任何问题了。
server {
listen 88;
root /home/www-data/www;
index index.php index.html;
server_name mypi.loveyu.me;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
listen 88;
root /home/www-data/www;
index index.php index.html;
server_name mypi.loveyu.me;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
< 正如上面对88端口直接转发到88后,在pi.loveyu.me上做对mypi的88端口的转发,此时的端口为80到88。
server
{
listen 80;
server_name pi.loveyu.me;
index index.html;
location /
{
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://mypi.loveyu.me:88;
}
}
{
listen 80;
server_name pi.loveyu.me;
index index.html;
location /
{
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://mypi.loveyu.me:88;
}
}
最后在内部建立这样一个配置文件,用户处理来之pi.loveyu.me的请求,同时将88端口设置到80端口。
server {
listen 80;
root /home/www-data/www;
index index.php index.html;
server_name pi.loveyu.me;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SERVER_PORT 80;
}
}
listen 80;
root /home/www-data/www;
index index.php index.html;
server_name pi.loveyu.me;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SERVER_PORT 80;
}
}
现在问题来了,看起来一切都OK了,80端口转发到88端口后设置端口为80,也可以正常访问,事实上大多数情况下可以,但是突然间就不行了,看看下面这个操作。
[root@host ~]# curl -I http://pi.loveyu.me/img_show HTTP/1.1 301 Moved Permanently Server: nginx Date: Sun, 19 Oct 2014 04:40:45 GMT Content-Type: text/html Content-Length: 184 Connection: keep-alive Location: http://pi.loveyu.me:88/img_show/ [root@host ~]# curl -I http://pi.loveyu.me/img_show/ HTTP/1.1 200 OK Server: nginx Date: Sun, 19 Oct 2014 04:41:02 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Vary: Accept-Encoding Vary: Accept-Encoding X-Powered-By: PHP/5.4.4-14+deb7u14 [root@host2 vhost]#
现在问题来了,这里的img_show是一个目录,ngixn在遇到目录时如果未添加斜杠结尾,会自动添加过去,这就是问题,由于这里是通过88端口的请求,ngixn的自动重定向会加上88端口,然后瞬间就右80端口变为88端口了,有一个办法就是告诉ngixn当前你要认为是80端口,而不是真实访问的88端口,PHP可以伪装但nginx似乎不行,有人通过设置proxy_set_header Host $host:$server_port;来解决问题,但是这里似乎不行。
最后妥协下,既然跳转到88端口了,那么我再添加一个88端口,然后再跳转回去,很无奈的做法了。
不咋懂这个
开始不懂了,只好前来点赞
也行吧,点赞就够了
看看能不能