我能否将某个精确的远程URL映射到不同端口的本地URL上?

8
长话短说:我们有一个远程开发服务器,其中包含几个Symfony2实例,如example.com/page1example.com/page2是不同的AWS实例,具有不同的应用程序。其中之一(即/page1)是我负责的。我能够在远程和本地开发它。显然,本地是最快的方式,但有很多原因为什么在整个应用程序在类似域下同时工作时远程开发更好。所以我想让example.com/page1引用我的本地实例,这样我就不需要每次Cmd+S都通过FTP发送文件了。
从Apache设置中,我可以使用ProxyPass将一些本地URL映射到远程URL。 ProxyPass /app/ http://example.com/app/ 我需要做的正好相反。
我有两个相同的Web应用程序在远程和本地运行。
远程:https://example.com:33333/app/ 本地:http://localhost:22222/app/ 我需要按以下方式使其工作:
- https://example.com:33333/homepage/ -> https://example.com:33333/homepage/ - https://example.com:33333/app/ -> http://localhost:22222/app/ 保持浏览器地址栏中的远程URL。
我能否在我的端上设置它(而不是从远程端上的ProxyPass)?
可能需要一些Chrome扩展或代理应用程序。

你需要这个上下文的清晰度;这是您想在本地框中进行本地使用或展示(例如,愿意遵循多个复制粘贴指令),企业设置(想要MitM一堆人),还是寻找100%自动化扩展特定于Google Chrome(如果是这样,请替换apache和nginx标签)。 您究竟想要实现什么? 现有答案到底有什么不足之处? - cnst
@cnst,让我描述一下我想解决的问题。我们有一个远程开发服务器,其中包含几个Symfony2实例。例如example.com/page1和example.com/page2是不同的aws实例,具有不同的应用程序。其中之一(即/page1)是我的责任。我能够在远程和本地开发它。显然,本地是最快的方式,但有一系列原因,为什么在整个应用程序在相似的域名下同时工作时,远程开发更好。因此,我希望使example.com/page1引用我的本地实例,这样我就不必每次Cmd+S都通过FTP发送文件了。 - Mak
3个回答

5

情况并不那么简单,而且与代理传递完全不同。

当用户在浏览器中输入“example.com”时,浏览器会决定将请求发送到哪里,您的nginx配置对此没有任何影响。 但是,浏览器会使用DNS来做出决策,您可以对其进行干扰。

如果您控制用户的DNS,则可以覆盖example.com域,使请求转到您的本地服务器。如果只是您的本地机器,则可以在/etc/hosts中执行此操作。之后,只需在nginx配置的server_name标签中添加example.com即可。

另一种可能性是配置路由器,但我假设这对您来说不是一个选项。


1
嗨!谢谢您的回答。听起来是个好计划,但您能分享一些具体的例子吗? - Mak

0
如果我正确理解了您的请求,这是我在Nginx中经常做的事情:
我会将 / 转到我的Web服务器,任何带有 "_" 的内容都会转到我的Elasticsearch服务器(例如 /index/type/_search),因此我的整个域实际上是多个系统,从而统一了域名并降低了SSL证书的成本。
以下是一个示例Nginx配置:
server {
    listen 10.1.40.2:80;

    #+ your example
    location ~ /app {
        #+ another server
        proxy_pass      http://10.1.40.11:80;
        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_set_header   X-Forwarded-Host $server_name;
    }

    #+ your example
    location ~ /homepage {
        #+ another server
        proxy_pass      http://10.1.40.10:80;
        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_set_header   X-Forwarded-Host $server_name;
    }

    location ~ /_ {
        #+ different port
        proxy_pass      http://127.0.0.1:9200;
        proxy_http_version 1.1;
        proxy_set_header Connection "Keep-Alive";
        proxy_set_header Proxy-Connection "Keep-Alive";
    }

    location / {
        proxy_pass      http://127.0.0.1:80;
        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_set_header   X-Forwarded-Host $server_name;
    }
}

0
你可以试着使用“Charles代理”应用程序,利用设置中的“Map Remote”选项映射你想要的URL并将其重写。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接