Nginx代理不会转发到暴露端口3001的容器,而是将URL重写为静态IP

时间:2018-12-04 19:05:24

标签: ruby-on-rails docker nginx proxy docker-compose

我在docker-compose中的SOLR上的Ruby on Rails上运行了一个Web应用程序。它暴露了端口3001,并且我想要一个比我的大学拥有的子域URL(并且我可以访问配置面板,在该面板中我只能指定“目标”,即我想在其上通过网络访问的本地服务器的IP)应用程序正在运行)。

我首先尝试在没有nginx的情况下执行此重定向,但是URL data.chembiosys.de仅被重定向到http://static.ip:3001 该应用程序正在运行,并且可以访问。

所以我想尝试使用nginx作为反向代理,但是效果基本相同: -我需要在目标域名的配置面板中指定服务器的端口号和IP -当我在浏览器中键入“ data.chembiosys.de”时,它会显示IP和端口号

我要做的是首先创建一个nginx代理网络:

sudo docker network create nginx-proxy

然后我用docker-compose.yml启动nginx-proxy:

version: "3"
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - /home/myhome/Projects/nginx-proxy/conf/my_conf.conf:/etc/nginx/conf.d/my_proxy.conf:ro

  whoami:
    image: jwilder/whoami
    environment:
      - VIRTUAL_HOST=whoami.local

networks:
  default:
    external:
      name: nginx-proxy

在第二卷中,我将以下配置文件复制到nginx-proxy容器:

server {
    listen 80; 
    server_name http://mystaticip:3001;
    client_max_body_size 2G;
    return 301 http://data.chembiosys.de$request_uri;
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header Host data.chembiosys.de;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_pass         http://mystaticip:3001;
    }
}

最后,我运行Rails应用docker-compose.yml

version: '3'
services:


  db: 
    image: mysql:5.7
    container_name: seek-mysql_cbs
    restart: always
    env_file:
      - docker/db.env
    volumes:
      - seek-mysql-db_cbs:/var/lib/mysql

  seek: # The SEEK application
    #build: .
    image: fairdom/seek:1.7
    container_name: seek_cbs
    command: docker/entrypoint.sh
    restart: always
    environment:
      RAILS_ENV: production
      SOLR_PORT: 8983
      NO_ENTRYPOINT_WORKERS: 1
    env_file:
      - docker/db.env
    volumes:
      - seek-filestore_cbs:/seek/filestore
      - seek-cache_cbs:/seek/tmp/cache
    ports:
      - "3001:3000"
    depends_on:
      - db
      - solr
    links:
      - db
      - solr

  seek_workers: # The SEEK delayed job workers
      #build: .
      image: fairdom/seek:1.7
      container_name: seek-workers_cbs
      command: docker/start_workers.sh
      restart: always
      environment:
        RAILS_ENV: production
        SOLR_PORT: 8983
      env_file:
        - docker/db.env
      volumes:
        - seek-filestore_cbs:/seek/filestore
        - seek-cache_cbs:/seek/tmp/cache
      depends_on:
        - db
        - solr
      links:
        - db
        - solr

  solr:
    image: fairdom/seek-solr
    container_name: seek-solr_cbs
    volumes:
      - seek-solr-data_cbs:/opt/solr/server/solr/seek/data
    restart: always



volumes:
  seek-filestore_cbs:
    driver: local-persist
    driver_opts:
      mountpoint: /home/myhome/Projects/ChemBioSys/docker_volumes/seek-filestore_cbs
  seek-mysql-db_cbs:
    driver: local-persist
    driver_opts:
      mountpoint: /home/myhome/Projects/ChemBioSys/docker_volumes/seek-mysql-db_cbs
  seek-solr-data_cbs:
    driver: local-persist
    driver_opts:
      mountpoint: /home/myhome/Projects/ChemBioSys/docker_volumes/seek-solr-data_cbs
  seek-cache_cbs:
    driver: local-persist
    driver_opts:
      mountpoint: /home/myhome/Projects/ChemBioSys/docker_volumes/seek-cache_cbs

networks:
  default:
    external:
      name: nginx-proxy

我觉得nginx-proxy未能将URL连接到应用程序。我做错了什么以及如何使用nginx将应用程序连接到URL?而且,如何避免将URL重写为IP:port?

P.S。我从SysAdmins获得的静态IP是字母数字的,当nginx-proxy docker-compose运行时,我看到以下警告:

nginx-proxy    | [warn] 30#30: server name "http://pc08.ian.uni-jena.de:3001" has suspicious symbols in /etc/nginx/conf.d/my_proxy.conf:3

0 个答案:

没有答案