feat(aio): redirect HTTP to HTTPS
This commit is contained in:
parent
413e11fac2
commit
cbde75e77b
|
@ -1,9 +1,19 @@
|
||||||
|
# Redirect all HTTP traffic to HTTPS
|
||||||
|
server {
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
listen {{$AIO_NGINX_PORT_HTTP}} default_server;
|
||||||
|
listen [::]:{{$AIO_NGINX_PORT_HTTP}};
|
||||||
|
|
||||||
|
# Ideally we want 308 (permanent + keep original method),
|
||||||
|
# but it is relatively new and not supported by some clients (e.g. cURL).
|
||||||
|
return 307 https://$host:{{$AIO_NGINX_PORT_HTTPS}}$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
# Serve PR-preview requests
|
# Serve PR-preview requests
|
||||||
server {
|
server {
|
||||||
server_name "~^pr(?<pr>[1-9][0-9]*)-(?<sha>[0-9a-f]{40})\.";
|
server_name "~^pr(?<pr>[1-9][0-9]*)-(?<sha>[0-9a-f]{40})\.";
|
||||||
|
|
||||||
listen {{$AIO_NGINX_PORT_HTTP}};
|
|
||||||
listen [::]:{{$AIO_NGINX_PORT_HTTP}};
|
|
||||||
listen {{$AIO_NGINX_PORT_HTTPS}} ssl;
|
listen {{$AIO_NGINX_PORT_HTTPS}} ssl;
|
||||||
listen [::]:{{$AIO_NGINX_PORT_HTTPS}} ssl;
|
listen [::]:{{$AIO_NGINX_PORT_HTTPS}} ssl;
|
||||||
|
|
||||||
|
@ -27,8 +37,6 @@ server {
|
||||||
server {
|
server {
|
||||||
server_name _;
|
server_name _;
|
||||||
|
|
||||||
listen {{$AIO_NGINX_PORT_HTTP}} default_server;
|
|
||||||
listen [::]:{{$AIO_NGINX_PORT_HTTP}};
|
|
||||||
listen {{$AIO_NGINX_PORT_HTTPS}} ssl default_server;
|
listen {{$AIO_NGINX_PORT_HTTPS}} ssl default_server;
|
||||||
listen [::]:{{$AIO_NGINX_PORT_HTTPS}} ssl;
|
listen [::]:{{$AIO_NGINX_PORT_HTTPS}} ssl;
|
||||||
|
|
||||||
|
|
|
@ -3,16 +3,41 @@ import * as path from 'path';
|
||||||
import {helper as h} from './helper';
|
import {helper as h} from './helper';
|
||||||
|
|
||||||
// Tests
|
// Tests
|
||||||
h.runForAllSupportedSchemes((scheme, port) => describe(`nginx (on ${scheme.toUpperCase()})`, () => {
|
describe(`nginx`, () => {
|
||||||
|
|
||||||
|
beforeEach(() => jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000);
|
||||||
|
afterEach(() => h.cleanUp());
|
||||||
|
|
||||||
|
|
||||||
|
it('should redirect HTTP to HTTPS', done => {
|
||||||
|
const httpHost = `${h.nginxHostname}:${h.nginxPortHttp}`;
|
||||||
|
const httpsHost = `${h.nginxHostname}:${h.nginxPortHttps}`;
|
||||||
|
const urlMap = {
|
||||||
|
[`http://${httpHost}/`]: `https://${httpsHost}/`,
|
||||||
|
[`http://${httpHost}/foo`]: `https://${httpsHost}/foo`,
|
||||||
|
[`http://foo.${httpHost}/`]: `https://foo.${httpsHost}/`,
|
||||||
|
};
|
||||||
|
|
||||||
|
const verifyRedirection = (httpUrl: string) => h.runCmd(`curl -i ${httpUrl}`).then(result => {
|
||||||
|
h.verifyResponse(307)(result);
|
||||||
|
|
||||||
|
const headers = result.stdout.split(/(?:\r?\n){2,}/)[0];
|
||||||
|
expect(headers).toContain(`Location: ${urlMap[httpUrl]}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
Promise.
|
||||||
|
all(Object.keys(urlMap).map(verifyRedirection)).
|
||||||
|
then(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
h.runForAllSupportedSchemes((scheme, port) => describe(`nginx (on ${scheme.toUpperCase()})`, () => {
|
||||||
const hostname = h.nginxHostname;
|
const hostname = h.nginxHostname;
|
||||||
const host = `${hostname}:${port}`;
|
const host = `${hostname}:${port}`;
|
||||||
const pr = '9';
|
const pr = '9';
|
||||||
const sha9 = '9'.repeat(40);
|
const sha9 = '9'.repeat(40);
|
||||||
const sha0 = '0'.repeat(40);
|
const sha0 = '0'.repeat(40);
|
||||||
|
|
||||||
beforeEach(() => jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000);
|
|
||||||
afterEach(() => h.cleanUp());
|
|
||||||
|
|
||||||
|
|
||||||
describe(`pr<pr>-<sha>.${host}/*`, () => {
|
describe(`pr<pr>-<sha>.${host}/*`, () => {
|
||||||
|
|
||||||
|
@ -239,4 +264,6 @@ h.runForAllSupportedSchemes((scheme, port) => describe(`nginx (on ${scheme.toUpp
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in New Issue