Using IIS as a reverse proxy for Jenkins

Howdy, guys! Today, I’d like to show you how to configure IIS along with ARR to publish and secure your Jenkins portal with HTTPS and SSL. Going forward, make sure that your site name (jenkins.pro, in my case) is publicly available (every external Certificate Authority requires domain validation before generating a SSL-certificate for your site. Otherwise, you can use a self-signed certificate for demo purposes (as it shown later in this post).

TIP: to get a SSL-certificate, you can use a completely free Let’s Encrypt CA (windows ACME tool located here , download it and extract the archive, and then run the wacs.exe application to create new certificate (see the screenshot below)) or comodo free SSL certificate for 90 days . Be careful! LetsEncrypt has some rate limits. For example, there is a Failed Validation limit of 5 failures per account, per hostname, per hour and if you’ve hit a rate limit, you don’t have a way to temporarily reset it. You’ll need to wait until the rate limit expires after a week

Prepare your environment

  • Install and configure Jenkins (it it’s not yet done)
  • Add Web Server (IIS) server role with the default settings + HTTP Redirection and WebSocket Protocol

Install-WindowsFeature Web-Server,Web-WebServer,Web-Common-Http,Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-Static-Content,Web-Http-Redirect,Web-Health,Web-Http-Logging,Web-Performance,Web-Stat-Compression,Web-Security,Web-Filtering,Web-App-Dev,Web-WebSockets,Web-Mgmt-Tools,Web-Mgmt-Console -IncludeManagementTools

  • Download and install URL Rewrite and IIS ARR
  • My machine is not in the domain, so I need to edit my hosts file (C:\Windows\System32\drivers\etc\hosts) and add a new line as follows: 127.0.0.1 jenkins.pro
  • Create a self-signed certificate or use the certificate provided by public CA (as we briefly discussed in the beginning). I also recommend to add created certificate to the Trusted Root Certification Authorities to avoid any warning messages in browsers.

New-SelfSignedCertificate -DnsName "jenkins.pro" -CertStoreLocation "cert:\LocalMachine\My"

Configure IIS and ARR

Open IIS manager (InetMgr.exe), go to the Default Web Site – Actions – Bindings and add a new site binding for HTTPS type (use the certificate created earlier). Then, edit HTTP binding by typing a hostname (might be used by ACME tool while generating a certificate)

Click on the IIS server name, go to Application Request Routing Cache – Server Proxy Settings and Enable the Proxy, disable
Reverse rewrite host in response header , and then click Apply

Navigate to the Default Web Site – URL Rewrite -View Server Variables... and add the a new variable named as HTTP_FORWARDED.

Go back to rules, and add a new reverse proxy rule, type a site name (jenkins.pro, in my case) and click OK. Doble-click on the created rule and define a condition input {CACHE_URL} with the following pattern ^(http|ws)s:// , and then add server variable HTTP_FORWARDED with the following value for={REMOTE_ADDR};by={LOCAL_ADDR};host=”{HTTP_HOST}”;proto=”https”

Then, we need to define how to rewrite URL under action:
{C:1}://jenkins.acme.example:8080{UNENCODED_URL}
and remove the Append query string check

Go to Application Pools and change .NET CLR Version to No Managed Code

Then go back to the Default Web Site and select Request Filtering – Edit Feature Settings and turn on Allow double escaping

In the Default Web Site → Configuration Editor change the Section to system.webServer/rewrite/rules , and change useOriginalURLEncoding to False

Configure Jenkins

Once you finished with IIS/ARR configuration, we need to set Jenkins to enable the proxy and work with a new URL (https://jenkins.pro, in my case). Carry out the following steps:

  1. Open Jenkins portal, go to Manage Jenkins – Configure Global Security enable Prevent Cross Site Request Forgery exploits and proxy compatibility
  2. In the Configure System, define a new URL under Jenkins location that should be used by Jenkins (https://jenkins.pro, in my case), and then apply the changes
  3. Open a new tab in the browser and verify that you can access the Jenkins by using the new URL and HTTPS

jenkins-iis-ssl

P.S. this post is based on the wiki article that contains a bit more details https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+IIS

Windows Azure Pack Roadmap and Future Support

Microsoft has recently published their vision and plans for the future of Windows Azure Pack. This document called as “Windows Azure Pack Roadmap and Future Support” and must be taken into consideration by any service providers who has datacenters based on WAP and related components (SC, Windows Server).

You can download the full version of roadmap here.

Here I’m just citing the most important quotations:

Product support for WAP and the current version of System Center will continue to be available until the end of 2022. Table 1 summarizes the product support lifecycle for the main components in a WAP cloud deployment.

windows azure pack support

Microsoft Azure Stack brings Azure to service provider datacenters so that they can accelerate time to market and expand the addressable market for their services portfolio. Application developers can maximize their productivity using a ‘write once, deploy to Azure or Azure Stack’ approach. Microsoft Azure Stack will be launching in the fourth quarter of calendar year 2016

Service Providers should continue to use Windows Server Hyper-V for highly virtualized environments (for example, virtualizing their most demanding workloads) along with Windows Azure Pack and System Center for management. More importantly, they should sell and support what is available today that end customers understand and ask for, and then prepare for future evolution of technologies.

Related Links