Security 在Openshift上以非root用户身份运行nginx并在端口80上侦听

Security 在Openshift上以非root用户身份运行nginx并在端口80上侦听,security,nginx,docker,openshift,openshift-origin,Security,Nginx,Docker,Openshift,Openshift Origin,我已经连续几天尝试配置在Openshift上运行的nginx容器,但直到现在,它还不能正常工作 我读过关于出于安全原因使用非root用户的文章。然而,无论是root用户还是非root用户,openshift都不允许我在端口80的容器中创建绑定 2017/06/22 21:18:57 [emerg] 1#1: bind() to 0.0.0.0:80 failed (13: Permission denied) nginx: [emerg] bind() to 0.0.0.0:80 failed

我已经连续几天尝试配置在Openshift上运行的nginx容器,但直到现在,它还不能正常工作

我读过关于出于安全原因使用非root用户的文章。然而,无论是root用户还是非root用户,openshift都不允许我在端口80的容器中创建绑定

2017/06/22 21:18:57 [emerg] 1#1: bind() to 0.0.0.0:80 failed (13: Permission denied)
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
例如,在我的本地机器上,我可以成功绑定到容器8081上的更高端口,然后在主机maschine docker run-rm-d-p 9000:8081 mynginx中创建一个用于访问的映射。通过这种方式,我可以在主机地址localhost:9000上成功访问该网站,但我不知道如何在openshit上实现类似的功能

我希望我可以部署我的映像,让非root用户和nginx监听更高的端口8081,同时openshift将服务器端口80的所有传入流量转发到容器nginx的端口8081。我当前的设置如下:

Dockerfile:

FROM nginx:alpine

COPY nginx.conf /etc/nginx/nginx.conf
COPY dist /usr/share/nginx/html

RUN chmod -R 777 /var/log/nginx /var/cache/nginx /var/run \
     && chgrp -R 0 /etc/nginx \
     && chmod -R g+rwX /etc/nginx \
     && rm /etc/nginx/conf.d/default.conf

EXPOSE 8081
和我的nginx.conf文件:

worker_processes 4;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events { worker_connections 1024; }

http {

  ssl_session_cache   shared:SSL:10m;
  ssl_session_timeout 30m;

  #See http://blog.argteam.com/coding/hardening-node-js-for-production-part-2-using-nginx-to-avoid-node-js-load
  proxy_cache_path        /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m;
  proxy_temp_path         /var/tmp;
  include                 mime.types;
  default_type            application/octet-stream;
  sendfile                on;
  keepalive_timeout       65;

  gzip                    on;
  gzip_comp_level         6;
  gzip_vary               on;
  gzip_min_length         1000;
  gzip_proxied            any;
  gzip_types              text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  gzip_buffers 16 8k;

  server {
    listen        8081;
    server_name   localhost;

    location / {
      root   /usr/share/nginx/html;
      index  index.html;
      expires -1;
      add_header Pragma "no-cache";
      add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
      try_files $uri$args $uri$args/ $uri $uri/ /index.html =404;
    }
  }
}

Obs:部署在管道过程中自动进行。我正在使用一个来自gitlab的工具,负责部署到openshift。此自定义映像用于处理部署。

使用端口8080侦听。当您在OpenShift外部公开web服务器的服务时,默认情况下,外部路由将使用端口80,并确保流量在内部路由到web服务器的端口8080。如果在OpenShift内部与服务联系,则需要通过端口8080与服务联系

另外,请注意,如果您只想托管一些静态文件,那么就可以使用针对nginx的S2I构建器


至少看看它是如何工作的。

使用8080端口监听。当您在OpenShift外部公开web服务器的服务时,默认情况下,外部路由将使用端口80,并确保流量在内部路由到web服务器的端口8080。如果在OpenShift内部与服务联系,则需要通过端口8080与服务联系

另外,请注意,如果您只想托管一些静态文件,那么就可以使用针对nginx的S2I构建器


至少看看它是如何工作的。

Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的询问的地方。另请参见超级用户。nginx错误消息不适合nginx配置文件。oc debug dc/your dc在shell nginx中的输出是什么?VStack Overflow是一个用于编程和开发问题的站点。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的询问的地方。另请参见超级用户。nginx错误消息不适合nginx配置文件。在shell nginx-V中,oc debug dc/your dc的输出是什么