
试验环境
主机: Mac 运行 Valte 跑 phpcms 程序,不加任何反代在本机或在内网内打开 phpcms.dev 进行任何操作都不会有问题的。
内网三台机器,全部最小化安装 ubuntu 14.04 lts , apt 直接安装各软件
配置都是直接拿官方教科书一般的配置文件,添加进去的配置少得可怜,连缓存都不会有的,不影响测试。
nginx 配置:
server { listen 80 default fastopen=256 reuseort; server_name _; access_log /var/log/nginx/proxy-access.log combined; error_log /var/log/nginx/proxy-error.log; resolver 8.8.4.4 8.8.8.8 valid=300s; resolver_timeout 10s; location / { proxy_pass http://172.16.1.168; include proxy.inc; } } varnish 配置: https://github.com/mattiasgeniar/varnish-4.0-configuration-templates/blob/master/default.vcl
squid 配置只是在原有默认配置上加了cache_peer上游服务器,访问其他都是没问题,唯独这个 phpcms 的安装步骤。
主要问题是在进行安装的第三步 post 数据时就一定过不去了,在 chrome 抓取到的错误信息如下:
156585: URL_REQUEST http://phpcms.dev/install/install.php? Start Time: 2016-10-28 17:19:10.326 t= 2381 [st= 0] +REQUEST_ALIVE [dt=24547] t= 2381 [st= 0] DELEGATE_INFO [dt=13] --> delegate_info = "NavigationResourceThrottle" t= 2394 [st= 13] +URL_REQUEST_DELEGATE [dt=2] t= 2394 [st= 13] DELEGATE_INFO [dt=2] --> delegate_info = "扩展程序“ uBlock Origin ”" t= 2396 [st= 15] -URL_REQUEST_DELEGATE t= 2396 [st= 15] +URL_REQUEST_START_JOB [dt=24518] --> load_flags = 37122 (BYPASS_CACHE | MAIN_FRAME | MAYBE_USER_GESTURE | VERIFY_EV_CERT) --> method = "POST" --> priority = "HIGHEST" --> upload_id = "1477638942369727" --> url = "http://phpcms.dev/install/install.php?" t= 2396 [st= 15] URL_REQUEST_DELEGATE [dt=0] t= 2396 [st= 15] HTTP_CACHE_GET_BACKEND [dt=0] t= 2396 [st= 15] HTTP_CACHE_DOOM_ENTRY [dt=0] --> net_error = -2 (ERR_FAILED) t= 2396 [st= 15] HTTP_CACHE_CREATE_ENTRY [dt=0] t= 2396 [st= 15] HTTP_CACHE_ADD_TO_ENTRY [dt=0] t= 2397 [st= 16] +HTTP_STREAM_REQUEST [dt=6] t= 2397 [st= 16] HTTP_STREAM_REQUEST_STARTED_JOB --> source_dependency = 156588 (HTTP_STREAM_JOB) t= 2403 [st= 22] HTTP_STREAM_REQUEST_BOUND_TO_JOB --> source_dependency = 156588 (HTTP_STREAM_JOB) t= 2403 [st= 22] -HTTP_STREAM_REQUEST t= 2403 [st= 22] +UPLOAD_DATA_STREAM_INIT [dt=0] t= 2403 [st= 22] UPLOAD_DATA_STREAM_INIT [dt=0] --> is_chunked = false --> net_error = 0 (?) --> total_size = 389 t= 2403 [st= 22] -UPLOAD_DATA_STREAM_INIT --> is_chunked = false --> net_error = 0 (?) --> total_size = 389 t= 2403 [st= 22] +HTTP_TRANSACTION_SEND_REQUEST [dt=1] t= 2403 [st= 22] HTTP_TRANSACTION_SEND_REQUEST_HEADERS --> POST /install/install.php? HTTP/1.1 Host: phpcms.dev Connection: keep-alive Content-Length: 389 Pragma: no-cache Cache-Control: no-cache Origin: http://phpcms.dev Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36 Content-Type: application/x-www-form-urlencoded Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 DNT: 1 Referer: http://phpcms.dev/install/install.php?step=3 Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2,ja;q=0.2 t= 2403 [st= 22] HTTP_TRANSACTION_SEND_REQUEST_BODY --> did_merge = false --> is_chunked = false --> length = 389 t= 2403 [st= 22] +UPLOAD_DATA_STREAM_READ [dt=1] --> current_position = 0 t= 2403 [st= 22] UPLOAD_DATA_STREAM_READ [dt=1] --> current_position = 0 t= 2404 [st= 23] -UPLOAD_DATA_STREAM_READ t= 2404 [st= 23] UPLOAD_DATA_STREAM_READ [dt=0] --> current_position = 389 t= 2404 [st= 23] -HTTP_TRANSACTION_SEND_REQUEST t= 2404 [st= 23] +HTTP_TRANSACTION_READ_HEADERS [dt=24510] t= 2404 [st= 23] HTTP_STREAM_PARSER_READ_HEADERS [dt=24510] --> net_error = -324 (ERR_EMPTY_RESPONSE) t=26914 [st=24533] -HTTP_TRANSACTION_READ_HEADERS --> net_error = -324 (ERR_EMPTY_RESPONSE) t=26914 [st=24533] -URL_REQUEST_START_JOB --> net_error = -324 (ERR_EMPTY_RESPONSE) t=26926 [st=24545] URL_REQUEST_DELEGATE [dt=1] t=26928 [st=24547] -REQUEST_ALIVE --> net_error = -324 (ERR_EMPTY_RESPONSE) 看到最后的 HTTP_TRANSACTION_READ_HEADERS ,耗时 24510 ,然后网页就返回无响应被重置了。
之前附言不正确,腾讯云CDN 大部分节点的服务器都没法正常走完整个流程,遇到的问题和本地测试的情况是一致的。除了用 chrome 进行测试,可以用 curl 模拟提交,后端无法返回数据。
curl 命令:
$ curl -v -H "Transfer-Encoding: chunked" -H "Content-Type: application/x-www-form-urlencoded" -d "step=4&install_phpsso=1&sso%5Bsso_url%5D=http%3A%2F%2F127.0.0.1%2Fphpsso_server%2F&sso%5Busername%5D=&sso%5Bpassword%5D=&selectmod%5B%5D=announce&selectmod%5B%5D=comment&selectmod%5B%5D=link&selectmod%5B%5D=vote&selectmod%5B%5D=message&selectmod%5B%5D=mood&selectmod%5B%5D=poster&selectmod%5B%5D=formguide&selectmod%5B%5D=wap&selectmod%5B%5D=upgrade&selectmod%5B%5D=tag&selectmod%5B%5D=sms&testdata=1" http://examples.com/install/install.php? 在不借助各种反代服务器,直接访问后端的服务器,在测试返回的数据中可以看到进行到了安装的第五步

但在测试提交不成功返回的 response,是直接中断了输出:
* Trying 111.202.85.44... * Connected to examples.com (111.202.85.44) port 80 (#0) > POST /install/install.php? HTTP/1.1 > Host: examples.com > User-Agent: curl/7.49.1 > Accept: */* > Transfer-Encoding: chunked > Content-Type: application/x-www-form-urlencoded > > 190 * upload completely sent off: 407 out of 400 bytes < HTTP/1.1 200 OK < Server: nginx < Connection: keep-alive < Date: Fri, 28 Oct 2016 18:19:01 GMT < Content-Type: text/html; charset= < Transfer-Encoding: chunked < Keep-Alive: timeout=60 < Vary: Accept-Encoding < Vary: Accept-Encoding < X-Daa-Tunnel: hop_count=1 < * Recv failure: Connection reset by peer * Closing connection 0 curl: (56) Recv failure: Connection reset by peer 如果把post 过去表单的值减少到几个,那么这些反代服务器都能正确返回数据。
1 vibbow 2016 年 10 月 28 日 via Android 可以用 caddy 啊 |
2 billlee 2016 年 10 月 28 日 proxy.inc 是什么内容? |
3 iCodex OP @billlee 就几行: ``` proxy_redirect off; proxy_set_header Accept-Encoding ''; proxy_set_header Host $host; proxy_set_header Referer $http_referer; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; ``` |
4 CRVV 2016 年 10 月 29 日 via Android 谁教你设 fastopen=256 的? |
7 binghe 2016 年 10 月 29 日 请问这是什么字体??? |