OS X MDM设备注册因Nginx代理失败

时间:2013-11-17 01:34:10

标签: nginx reverse-proxy mdm osx-server

我最终试图将nginx配置为运行我们的mdm服务的OS X服务器(在虚拟机中)的透明代理。如果没有nginx,mdm服务器可以正常工作,我可以执行远程设备注册和管理,但是我在同一网络上托管多个服务器,并且需要能够使用nginx代理多个ips和端口。

没有nginx的设置: 我正在为我的fqdn,mdm.servername.com使用外部DNS,它正确解析为我的公共IP地址。我的防火墙成功将端口443和1640转发到私有IP,10.0.1.60的mdm服务器。我禁用了OS X服务器DNS,而我也使用mdm.servername.com作为我的OS服务器的主机名。我将mdm.servername.com设置为解析为/ etc / hosts中的127.0.0.1以构建打开的目录,然后从/ etc / hosts中删除此条目。不知道这是否是其中一个问题。我可以从网络外部访问http://mdm.servername.com/mydevices,并且可以毫无问题地注册我的ipad。在我介绍nginx之前,一切正常。

使用nginx进行设置: 再次使用外部DNS为我的fqdn,mdm.servername.com。我在私有IP 10.0.1.50上运行nginx,我将端口443和1640转发到10.0.1.50。我有在OS 10.0.1.50上运行的OS X mdm服务器。 mdm服务器已禁用DNS,mdm服务器也使用mdm.servername.com作为操作系统主机名。我仍然可以访问mdm(https://mdm.servername.com/mydevices)的网站部分,我可以毫无问题地安装信任配置文件,但是当我尝试从网络外部注册我的iPad时,它成功地“注册了证书”,但是当这是“安装配置文件”它甚至超时。我在nginx访问日志中看到了api调用的进展:

Nginx access.log

173.171.23.81 - - [16/Nov/2013:19:56:47 -0500] "GET /scep/?operation=GetCACert&message=Device%20Management%20Identity%20Certificate HTTP/1.1" 200 1126 "-" "profiled/1.0 CFNetwork/672.0.8 Darwin/14.0.0"
173.171.23.81 - - [16/Nov/2013:19:56:48 -0500] "GET /scep/?operation=GetCACaps&message=Device%20Management%20Identity%20Certificate HTTP/1.1" 200 52 "-" "profiled/1.0 CFNetwork/672.0.8 Darwin/14.0.0"
173.171.23.81 - - [16/Nov/2013:19:56:49 -0500] "POST /scep/?operation=PKIOperation HTTP/1.1" 200 3046 "-" "profiled/1.0 CFNetwork/672.0.8 Darwin/14.0.0"
173.171.23.81 - - [16/Nov/2013:19:58:20 -0500] "PUT /devicemanagement/api/device/mdm_checkin HTTP/1.1" 504 191 "-" "MDM/1.0"

PUT上的504错误发生在iPad已报告配置文件安装失败后约30秒。

Nginx error.log

2013/11/16 19:58:20 [error] 7983#0: *10 upstream timed out (110: Connection timed out) while reading response header from upstream, client: xxx.xxx.xx.xx, server: mdm.servername.com, request: "PUT /devicemanagement/api/device/mdm_checkin HTTP/1.1", upstream: "https://10.0.1.60:443/devicemanagement/api/device/mdm_checkin", host: "mdm.servername.com"

因此,nginx报告了与mdm服务器通信以进行PUT签入操作的超时...

在MDM Server上,Apache Logs也指示连接错误 Apache access_log

mdm.servername.com 10.0.1.50 - - [16/Nov/2013:19:56:47 -0500] "PUT /devicemanagement/api/device/mdm_checkin HTTP/1.0" 403 - "-" "MDM/1.0"

Apache error_log

[Sat Nov 16 19:56:22 2013] [error] (61)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:3328 (127.0.0.1) failed
[Sat Nov 16 19:56:22 2013] [error] ap_proxy_connect_backend disabling worker for (127.0.0.1)
[Sat Nov 16 19:56:22 2013] [error] (61)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:3329 (127.0.0.1) failed
[Sat Nov 16 19:56:22 2013] [error] ap_proxy_connect_backend disabling worker for (127.0.0.1)
[Sat Nov 16 19:56:22 2013] [error] (61)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:3327 (127.0.0.1) failed
[Sat Nov 16 19:56:22 2013] [error] ap_proxy_connect_backend disabling worker for (127.0.0.1)
[Sat Nov 16 19:56:22 2013] [error] (61)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:3325 (127.0.0.1) failed
[Sat Nov 16 19:56:22 2013] [error] ap_proxy_connect_backend disabling worker for (127.0.0.1)
[Sat Nov 16 19:56:22 2013] [error] (61)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:3326 (127.0.0.1) failed
[Sat Nov 16 19:56:22 2013] [error] ap_proxy_connect_backend disabling worker for (127.0.0.1)
[Sat Nov 16 19:56:22 2013] [error] (61)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:3324 (127.0.0.1) failed
[Sat Nov 16 19:56:22 2013] [error] ap_proxy_connect_backend disabling worker for (127.0.0.1)
[Sat Nov 16 19:56:22 2013] [error] (61)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:3322 (127.0.0.1) failed
[Sat Nov 16 19:56:22 2013] [error] ap_proxy_connect_backend disabling worker for (127.0.0.1)
[Sat Nov 16 19:56:22 2013] [error] (61)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:3323 (127.0.0.1) failed
[Sat Nov 16 19:56:22 2013] [error] ap_proxy_connect_backend disabling worker for (127.0.0.1)
[Sat Nov 16 19:58:17 2013] [error] [client 10.0.1.50] Re-negotiation handshake failed: Not accepted by client!?

我假设我有一些与nginx配置错误的东西,但我不够聪明,无法将所有这些部分放在一起寻求解决方案......希望你们更有能力帮助我的人...

Nginx配置:

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
  worker_connections 768;
}

http {
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;

  types_hash_max_size 4096;
  default_type application/octet-stream;

  ssl_certificate /etc/nginx/ssl/servername.com/_.servername.com.combined.crt;
  ssl_certificate_key /etc/nginx/ssl/servername.com/_.servername.com.key;

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;

  gzip on;
  gzip_disable "msie6";

  server {
    listen 443 ssl;
    listen 1640;

    server_name mdm.servername.com;

    location / {
      proxy_pass $scheme://10.0.1.60:$server_port$request_uri;

      sendfile 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_max_temp_file_size 0;

      #this is the maximum upload size
      client_max_body_size 10m;
      client_body_buffer_size 128k;

      proxy_connect_timeout 90;
      proxy_send_timeout 90;
      proxy_read_timeout 90;

      proxy_buffer_size 4k;
      proxy_buffers 4 32k;
      proxy_busy_buffers_size 64k;
      proxy_temp_file_write_size 64k;
    }
  }
}

其他信息: 我有一个来自爸爸的通配符ssl证书,nginx用于ssl,我也在OS X Server上的网站服务器上使用它。我正在使用Server生成的中间证书来签署配置文件。

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

我得到了与后端工作人员相同的错误,但仍然是。

昨晚我与一位Apple Solutions Architect进行了交谈,他觉得代理Profile Manager永远不会起作用。

显然推荐的解决方案是CISCO安全设备,该端口转发到DMZ中的ProfileManager。他建议SSL认为Nginx是中间人攻击中的人,并且PHP错误是红色鲱鱼。他还建议我查看http://twocanoes.com/push-diagnostics。 2.99英镑,我肯定会推荐它。

今天注册仍然失败 - 无法存储证书颁发机构证书,但有希望。

使用iPhone配置实用程序将iOS设备连接到Mac或PC。

查看控制台,查找它开始出错的位置,“无法插入Sqlite,无法复制”。检查iPad没有安装任何配置文件或证书 - 没有安装。

擦拭iPad并按下注册按钮,嘿嘿 - 它已注册。

iPad在“注册配置文件使用情况”下以及包含所有正确信息的设备中正确显示。当我离开ProfileManger推送个人资料时。我似乎记得读过一些关于能够从iPad删除注册资料的内容,但它从未真正删除过!

使其成功 获得推送诊断实用程序 我将1640从服务器块拆分为自己的块,以尝试使代理尽可能透明。 擦拭iPad 注册

快乐的日子。

此致

斯蒂芬