簡體   English   中英

在Openshift上以非root用戶身份運行nginx並在端口80上偵聽

[英]Running nginx as non-root user on Openshift and listening on port 80

我已經連續幾天嘗試配置在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),然后在主機機器中創建要訪問的映射( 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中的自定義 docker 映像 ,該映像負責部署到openshift。 該自定義映像使用openshift原始CLI處理部署。

使用端口8080監聽。 當您在OpenShift之外公開Web服務器的服務時,外部路由無論如何都將默認使用端口80,並確保將流量從內部路由到Web服務器的端口8080。 如果在內部將服務與OpenShift聯系,則需要通過端口8080與之聯系。

另外,請注意,如果您只想托管一些靜態文件,則可以使用Nginx的S2I構建器。

至少了解它是如何工作的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM