我正在一个有很多图像的网站上工作(想想smugmug/flickr),根据我的阅读,flickr使用squid作为图像缓存.我的图像将存储在Amazon S3上,因此缓存服务器也有助于节省托管资金.我想通过以下配置听到它的想法是可行的.
这可以吗?我应该将域名指向运行清漆的服务器吗?
谢谢!
我在设置虚拟主机文件时遇到了一些问题.我想通过反向代理将vistors发送到正确的服务器.我当前的设置给了我一个内部错误.
我只有一个公共IP,并希望在正确的服务器名称条件下将访问者代理到其中一个本地虚拟服务器.
NameVirtualHost *:80
<VirtualHost *:80>
ServerName sub.domain.com
ServerAdmin me@domain.com
ProxyPreserveHost On
ProxyPass / http://192.168.1.11:80
ProxyPassReverse / http://192.168.1.11:80
</VirtualHost>
<VirtualHost *:80>
ServerName otherdomain.com
ServerAdmin me@domain.com
ProxyPreserveHost On
ProxyPass / http://192.168.1.12:80
ProxyPassReverse / http://192.168.1.12:80
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
如果有人能找到任何我做错的事情,或者有其他办法实现我的目标,我很乐意听到.
我想我已经过头了,无法弄清楚如何调试或从哪里开始?!! 任何指导将不胜感激!
问题:
目标:
让"www.site.com/blog"显示"blog.site.com"中的内容,而无需重定向/更改浏览器URL
建立
所以我无法访问服务器配置
途径
使用rack-reverse-proxy gem,如何使用子目录而不是子域?由jplewicke
履行
的Gemfile
gem "rack-reverse-proxy", :require => "rack/reverse_proxy"
Run Code Online (Sandbox Code Playgroud)
config.ru(在运行AppName :: Application 之前)
use Rack::ReverseProxy do
reverse_proxy(/^\/blog(\/.*)$/,'http://blog.site.com$1',
opts = {:preserve_host => true})
end
Run Code Online (Sandbox Code Playgroud)
配置/ routes.rb中
match "/blog" => redirect("/blog/")
Run Code Online (Sandbox Code Playgroud)
结果/问题
它在我的机器上开发效果很好,但是当我把它投入生产时它会超时.它不仅超时,而且之后整个应用程序被挂起或者其他东西,即每个请求都超时www.site.com(在尝试blog.site.com之前有效).大约5-10分钟后,www.site.com再次运作,但blog.site.com超时.
日志
2013-03-05 05:54:19 + 00:00应用web.1 - - 2013年开始获取66.108.140.26/cpe-66-108-140-26.nyc.res.rr.com获取"/资源" -03-05 05:54:19 +0000
2013-03-05 05:54:19 + 00:00 heroku router - - at = info method = GET path =/blog host = www.site.com fwd ="66.108.140.26/cpe-66-108-140- …
我已经创建了一个这样的反向代理:
func ProxyFunc(w http.ResponseWriter, r *http.Request) {
u, err := url.Parse("http://mynetworkserverhere:8957/some/path/here/")
if err == nil {
proxy := httputil.NewSingleHostReverseProxy(u)
proxy.ServeHTTP(w, r)
//????
} else {
w.Write([]byte(err.Error()))
}
}
Run Code Online (Sandbox Code Playgroud)
并从main调用它:
func main() {
log.Printf("Starting...")
http.HandleFunc("/", ProxyFunc)
log.Fatal(http.ListenAndServe(":6060", nil))
}
Run Code Online (Sandbox Code Playgroud)
它可以从客户端按预期工作,但我想从代理中读取响应,我该怎么做?
在下面的示例中:
package main
import (
"fmt"
"log"
"net/http"
"net/http/httputil"
"net/url"
)
func main() {
p := new(Proxy)
//host := "www.google.com" // WORKS AS EXPECTED
host := "www.apple.com" // GIVES AN ERROR
u, err := url.Parse(fmt.Sprintf("http://%v/", host))
if err != nil {
log.Printf("Error parsing URL")
}
p.proxy = httputil.NewSingleHostReverseProxy(u)
http.Handle("/", p)
log.Fatal(http.ListenAndServe("localhost:8000", nil))
}
type Proxy struct {
proxy *httputil.ReverseProxy
}
func (p *Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) {
p.proxy.ServeHTTP(w, r)
}
Run Code Online (Sandbox Code Playgroud)
将Chrome链接到'localhost:8000'时,将'www.google.com'与'www.apple.com'交换会导致此错误:
无效的网址
请求的URL"/"无效.参考编号#9.a61a32b8.1438231668.41733295
为www.apple.com做一点挖掘,我得到:
? ~ curl --ipv4 -v …Run Code Online (Sandbox Code Playgroud) 在我的REST API中,我具有一些资源的常规CRUD端点。如果我这样做了,GET /items/42并且没有这样的项目,则正常的行为是返回404 NOT FOUND。
但是,有一种情况与我有关。在这种情况下,客户端需要检查是否存在资源(由令牌隐式标识),如果不存在,请创建该资源。因此,客户端将尝试检索资源,并且如果404接收到a,则客户端应用程序将显示创建项目所需的UI,然后继续获取POST新资源。从某种意义上说,这是一种特殊的资源,因为由于其ID是从其他参数派生的,因此甚至在创建之前就已知道它。例如,考虑一个用户注册过程。客户会问“我存在吗?如果不存在->注册我”。
我真正关心的是我是否需要担心“虚假” 404:s?考虑服务器通常被API网关,反向代理等所包围,是否存在404 NOT FOUND由于与REST服务器本身无关的临时错误而导致周围实体产生的风险?如果是这样,它可能会诱使客户相信该项目尚未创建,并且应该立即创建。即使POST由于该项目已经存在而导致创建该项目的请求失败,这也不是很好,因为用户可能无缘无故地输入了数据等。
这是要考虑的问题还是过于偏执?我想,如果客户不能相信a 404是幂等的(当然,直到创建资源),还会出现许多其他问题。有没有实际情况,API网关或类似网关会404自行报告?
如果这是一个有效的场景,我是否需要一个“更安全”,更明确的响应,说该请求确实成功但未找到资源,例如使用200 OK带有空JSON正文或a {isRegistered: false},a 204 NO CONTENT或类似内容进行响应?这为其他奇怪的事情打开了-如果对不存在的资源的请求会200以空的正文来响应,则也许创建该项目将是a PUT而不是a POST,等等?这似乎是蠕虫的罐头……全部归结为“是否404保证给定资源不存在?” 。
rest reverse-proxy crud http-status-code-404 asp.net-web-api
我创建了一个简单的基于Web的电子邮件客户端,如gmail.我想要显示图像,但为了使用我的ssl网站,我需要在ssl上提供所有图像(否则我会收到"混合内容"警告).所以我需要像gmail这样的反向代理来提供这些图像.
我将重写电子邮件中的所有图像URL以指向反向代理.例如:
我的反向代理是https://myreverseproxy.com
原始图片网址http://stuff.com/image1.jpg
我将重写网址为https://myreverseproxy.com?image-url=http://stuff.com/image1.jpg
当反向代理获得请求" https://myreverseproxy.com?image-url=http://stuff.com/image1.jpg "时,它将从查询参数image-url获取原始图像(http:// stuff.com/image1.jpg),获取图像,并将其返回给https://myreverseproxy.com?image-url=http://stuff.com/image1.jpg的请求者.
是否有任何服务可以开箱即用?我可以写一个简单的吗?我是否已经为此安装了任何库或解决方案?
我对任何语言和任何平台都持开放态度......我只想解决这个问题.
在我的项目中,使用Spring引导和默认的tomcat服务器开发Web应用程序.我使用NGINX作为负载均衡器,并在NGINX配置中配置了我的spring-boot-web-app,如下所示:
location /spring-boot-web-app {
proxy_pass http://spring-boot-web-app/
}
http {
upstream /spring-boot-web-app {
server <IP_of_spring_boot_app>:<Port_of_spring_boot_app>
}
}
Run Code Online (Sandbox Code Playgroud)
现在让我们分别说NGINX IP和端口为nginx_ip和nginx_port.我的网络应用程序的工作URL也是:http:// web_app_ip:web_app_port/rest/echo/hi
上面的URL工作正常.但是当我尝试通过NGINX点击相同的URI时,它会抛出404.通过NGINX使用的URL为: http:// nginx_ip:nginx_port/spring-boot-web-app/rest/echo/hi
有什么我想念的吗?
我在一个IIS反向代理后面的Kestrel中运行了一个简单的asp.net core 2.0 WebApi应用程序.单个路由非常简单,它只是发出一个http请求:
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri("http://www.google.ca");
HttpResponseMessage response = await client.GetAsync("/search?q=test&oq=test");
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
但是,此请求始终需要2-3秒才能完成.然而,如果我在没有IIS的情况下直接运行Kestrel,相同的代码需要大约100ms.
我按照所有Microsoft 文档来配置使用IIS的kestrel.
iis reverse-proxy dotnet-httpclient kestrel-http-server asp.net-core-2.0
有什么方法可以自定义/缩写前端名称,该名称由docker使用标签自动创建。例如,我有这个长名:
frontend-Host-dashboard-test-local-www-dashboard-test-local-0
对于后端,我们可以使用以下标签:
"traefik.backend=traefik"
文件生成的前端和后端绝对缩短,它们也没有前端/后端前缀。