<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif; ">
<div>Alright, I had to re-write the rule a bit since I'm watching for X-Forwarded-Proto, and want to handle domain.com as well as www.domain.com.  I've put this rule together, and it seems to be working OK…</div>
<div><br>
</div>
<div>
<div>sub vcl_recv {</div>
<div>  if((req.http.host ~ "^(?i)pethub.com") || ((req.http.host ~ "^(?i)www.pethub.com") && (req.http.X-Forwarded-Proto !~ "(?i)https"))){</div>
<div>      set req.http.x-redir-url = "https://www.pethub.com" + req.url;</div>
<div>      error 750 req.http.x-redir-url;</div>
<div>  }</div>
</div>
<div>}</div>
<div><br>
</div>
<div>
<div>sub vcl_error {</div>
<div>  if (obj.status == 750) {</div>
<div>    set obj.http.Location = obj.response;</div>
<div>    set obj.status = 302;</div>
<div>    return(deliver);</div>
<div>  }</div>
</div>
<div><br>
</div>
<div>Thanks for the info!</div>
<div><br>
</div>
<div>Jason</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>Jason Farnsworth <<a href="mailto:jason@pethub.com">jason@pethub.com</a>><br>
<span style="font-weight:bold">Date: </span>Wed, 14 Dec 2011 20:39:59 -0800<br>
<span style="font-weight:bold">To: </span>Per Buer <<a href="mailto:perbu@varnish-software.com">perbu@varnish-software.com</a>><br>
<span style="font-weight:bold">Cc: </span>"<a href="mailto:varnish-misc@varnish-cache.org">varnish-misc@varnish-cache.org</a>" <<a href="mailto:varnish-misc@varnish-cache.org">varnish-misc@varnish-cache.org</a>><br>
<span style="font-weight:bold">Subject: </span>Re: Rewriting/enforcing SSL behing an SSL termination point<br>
</div>
<div><br>
</div>
<div>
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif; ">
<div>This is great, I'll give this a shot and report back!</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>Per Buer <<a href="mailto:perbu@varnish-software.com">perbu@varnish-software.com</a>><br>
<span style="font-weight:bold">Date: </span>Fri, 9 Dec 2011 09:48:48 +0100<br>
<span style="font-weight:bold">To: </span>Jason Farnsworth <<a href="mailto:jason@pethub.com">jason@pethub.com</a>><br>
<span style="font-weight:bold">Cc: </span>"<a href="mailto:varnish-misc@varnish-cache.org">varnish-misc@varnish-cache.org</a>" <<a href="mailto:varnish-misc@varnish-cache.org">varnish-misc@varnish-cache.org</a>><br>
<span style="font-weight:bold">Subject: </span>Re: Rewriting/enforcing SSL behing an SSL termination point<br>
</div>
<div><br>
</div>
On Fri, Dec 9, 2011 at 8:08 AM, Jason Farnsworth <span dir="ltr"><<a href="mailto:jason@pethub.com">jason@pethub.com</a>></span> wrote:<br>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
We are hosted on Amazon Web Services and all SSL termination is done by an<br>
Elastic Load Balancer.  So all I'm looking to do is re-write URLs like<br>
this<br>
<br>
<a href="http://domain.com" target="_blank">http://domain.com</a> -> <a href="https://www.domain.com" target="_blank">
https://www.domain.com</a><br>
<a href="http://www.domain.com" target="_blank">http://www.domain.com</a> -> <a href="https://www.domain.com" target="_blank">
https://www.domain.com</a><br>
<a href="https://domain.com" target="_blank">https://domain.com</a> -> <a href="https://www.domain.com" target="_blank">
https://www.domain.com</a></blockquote>
<div><br>
</div>
<div>Varnish will not rewrite the actual content coming from the backend. We can however, _redirect_ the client whenever they ask for a http:// URL.</div>
<div><br>
</div>
<div>We use the following code on <a href="http://varnish-cache.org">varnish-cache.org</a> to do this:</div>
<div><br>
</div>
<div>in vcl_recv:</div>
<div>
<div><br>
</div>
<div>  if ( (req.http.host ~ "(?i)<a href="http://www.varnish-cache.org">www.varnish-cache.org</a>") && !(client.ip ~ localhost)) {</div>
<div>    set req.http.x-redir-url = "https://" + req.http.host + req.url;</div>
<div>    error 750 req.http.x-redir-url;</div>
<div>  }</div>
</div>
<div><br>
</div>
<div>(..)</div>
<div><br>
</div>
<div><br>
</div>
<div>
<div>sub vcl_error {</div>
<div>  # standard redirection in VCL:</div>
<div>  if (obj.status == 750) {</div>
<div>    set obj.http.Location = obj.response;</div>
<div>    set obj.status = 302;</div>
<div>    return(deliver);</div>
<div>  }</div>
<div>}</div>
</div>
<div><br>
</div>
<div> </div>
<div>Since we have an SSL terminator in front of Varnish client.ip is localhost when there is SSL present. You might want to change the code to test
<span class="Apple-style-span" style="color: rgb(34, 34, 34); font-size: 13px; background-color: rgba(255, 255, 255, 0.917969); font-family: arial, sans-serif; ">
X-Forwarded-Proto for whatever it is set to.</span></div>
<div><br>
</div>
</div>
<div><br>
</div>
-- <br>
<img src="http://www.varnish-software.com/sites/default/files/varnishsoft_white_190x47.png">
<div>Per Buer, CEO<br>
Phone: +47 21 98 92 61 / Mobile: +47 958 39 117 / Skype: per.buer<br>
<i>Varnish makes websites fly!</i>
<div><a href="http://www.varnish-software.com/whitepapers" target="_blank">Whitepapers</a> |
<a href="http://www.youtube.com/watch?v=x7t2Sp174eI" target="_blank">Video</a> | <a href="https://twitter.com/varnishsoftware" target="_blank">
Twitter</a> <br>
<br>
</div>
</div>
<br>
</span></div>
</div>
</span>
</body>
</html>