diff --git a/echoheaders-redirect/Dockerfile b/echoheaders-redirect/Dockerfile new file mode 100644 index 000000000..fd3b042f0 --- /dev/null +++ b/echoheaders-redirect/Dockerfile @@ -0,0 +1,18 @@ +# Copyright 2015 The Kubernetes Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM gcr.io/google_containers/nginx-slim:0.6 +MAINTAINER Prashanth B +ADD nginx.conf /etc/nginx/nginx.conf +ADD README.md README.md diff --git a/echoheaders-redirect/Makefile b/echoheaders-redirect/Makefile new file mode 100644 index 000000000..d6b347ec2 --- /dev/null +++ b/echoheaders-redirect/Makefile @@ -0,0 +1,11 @@ +all: push + +# TAG 0.0 shouldn't clobber any release builds +TAG = 1.3 +PREFIX = gcr.io/google_containers/echoserver-redirect + +container: + docker build -t $(PREFIX):$(TAG) . + +push: container + gcloud docker push $(PREFIX):$(TAG) diff --git a/echoheaders-redirect/README.md b/echoheaders-redirect/README.md new file mode 100644 index 000000000..0f1712e11 --- /dev/null +++ b/echoheaders-redirect/README.md @@ -0,0 +1,6 @@ +# Echoserver - forked from echoheaders-1.3 + +This is a simple server that responds with the http headers it received. +Image versions >= 1.3 redirect requests on :80 with `X-Forwarded-Proto: http` to :443. +Image versions > 1.0 run an nginx server, and implement the echoserver using lua in the nginx config. +Image versions <= 1.0 run a python http server instead of nginx, and don't redirect any requests. diff --git a/echoheaders-redirect/echo-app.yaml b/echoheaders-redirect/echo-app.yaml new file mode 100644 index 000000000..70d55cda8 --- /dev/null +++ b/echoheaders-redirect/echo-app.yaml @@ -0,0 +1,32 @@ +apiVersion: v1 +kind: Service +metadata: + name: echoheaders + labels: + app: echoheaders +spec: + type: NodePort + ports: + - port: 80 + targetPort: 8080 + protocol: TCP + name: http + selector: + app: echoheaders +--- +apiVersion: v1 +kind: ReplicationController +metadata: + name: echoheaders +spec: + replicas: 1 + template: + metadata: + labels: + app: echoheaders + spec: + containers: + - name: echoheaders + image: gcr.io/google_containers/echoserver-redirect:1.3 + ports: + - containerPort: 8080 diff --git a/echoheaders-redirect/nginx.conf b/echoheaders-redirect/nginx.conf new file mode 100644 index 000000000..ecb1c3cd5 --- /dev/null +++ b/echoheaders-redirect/nginx.conf @@ -0,0 +1,57 @@ +events { + worker_connections 1024; +} + +http { + default_type 'text/plain'; + # maximum allowed size of the client request body. By default this is 1m. + # Request with bigger bodies nginx will return error code 413. + # http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size + client_max_body_size 10m; + + server { + # please check the benefits of reuseport https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1 + # basically instructs to create an individual listening socket for each worker process (using the SO_REUSEPORT + # socket option), allowing a kernel to distribute incoming connections between worker processes. + listen 8080 default_server reuseport; + + # Replace '_' with your hostname. + server_name _; + if ($http_x_forwarded_proto = "http") { + return 301 https://$host$request_uri; + } + + location / { + lua_need_request_body on; + content_by_lua_block { + ngx.say("CLIENT VALUES:") + ngx.say("client_address=", ngx.var.remote_addr) + ngx.say("command=", ngx.req.get_method()) + ngx.say("real path=", ngx.var.request_uri) + ngx.say("query=", ngx.var.query_string) + ngx.say("request_version=", ngx.req.http_version()) + ngx.say("request_uri=", ngx.var.scheme.."://"..ngx.var.host..":"..ngx.var.server_port..ngx.var.request_uri) + ngx.say("") + + ngx.say("SERVER VALUES:") + ngx.say("server_version=", "nginx: "..ngx.var.nginx_version.." - lua: "..ngx.config.ngx_lua_version) + ngx.say("") + + ngx.say("HEADERS RECEIVED:") + local headers = ngx.req.get_headers() + local keys = {} + for key, val in pairs(headers) do + table.insert(keys, key) + end + + table.sort(keys) + for i, key in ipairs(keys) do + ngx.say(key, "=", headers[key]) + end + + ngx.say("BODY:") + ngx.print(ngx.var.request_body or "-no body in request-") + } + } + } +}