OSX应用程序内的反向代理

时间:2013-12-02 09:39:49

标签: objective-c xcode macos nginx reverse-proxy

是否有可以嵌入在Objective-C中编写的OSX应用程序中的反向代理?我需要开发一个应用程序,它将嵌入反向代理但不使用外部代理服务器实例。有人用这种方式使用Nginx吗?

2 个答案:

答案 0 :(得分:2)

技术上可行。我认为你使用Nginx的想法会起作用。你为什么特意叫出Objective-C?我不明白为什么你不会使用普通的C语言(这应该没有问题)。您可以考虑为代理使用单独的进程空间,否则您的应用程序和代理可能会以您不期望的方式相互干扰。 (比如调用exit(),处理信号,崩溃等)然后你不必弄清楚如何在Xcode中重新编译代理等等 - 你只需要一个二进制文件就可以配置并运行它。 / p>

问题是,你为什么要这样做?只有在要连接的后备服务器场时,反向代理才有意义。您是否只需要一个嵌入式Web服务器来为您的应用程序提供页面?为什么不直接使用一个?反向代理只会让事情变得复杂。

答案 1 :(得分:1)

似乎没有用Objective-C编写的反向代理:) 我使用的解决方案是:

  • 下载nginx源代码
  • 使用
  • 进行配置

    ./configure --sbin-path=/usr/local/nginx
       --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/nginx/src/$PCRE_FILE/ --group=www --user=www --with-http_stub_status_module --with-http_gzip_static_module --prefix=/usr/local/nginx
   
  • 将二进制文件复制到boundle
  • 使用
  • 运行二进制文件

    NSTask *task = [[NSTask alloc] init];
    NSPipe * out = [NSPipe pipe];
    [task setStandardOutput:out];

    [task setLaunchPath:[NSString stringWithFormat:@"%@/Library/run/nginx", appPath]];
    [task setArguments:@[@"-c", [NSString stringWithFormat:@"%@/Library/conf/nginx/nginx.conf", appPath], @"-p", [NSString stringWithFormat:@"%@/Library/nginx", appPath]]];

    [task launch];
    [task waitUntilExit];
    read = [out fileHandleForReading];
    dataRead = [read readDataToEndOfFile];
    stringRead = [[NSString alloc] initWithData:dataRead encoding:NSUTF8StringEncoding];

    NSLog(@"output: %@", stringRead);