• Как заставить apache/nginx под докером работать вместе с локальным nginx?

    IgorPI
    @IgorPI
    Я тоже совсем недавно работаю с докером.
    Поделюсь своим опытом.

    Использую Docker-compose.

    Например мне нужно для сайта, открыть внешний доступ, который крутится где-то там в докере.
    # Development configuration
    version: "3.1"
    
    services:
    
      app:
        container_name: rusaddress.app
        build:
          context: .
          dockerfile: ./docker/php/Dockerfile-dev
        volumes:
          - .:/www
          - ./docker/php/log:/var/log
        depends_on:
          - db
        links:
          - db
        expose:
          - 9000
    
    
    
      # Nginx api server
      nginx-api:
        container_name: rusaddress.nginx-api
        restart: always
        build: ./docker/nginx
        volumes:
          - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
          - ./docker/nginx/sites-enabled/vhost-api.rusaddress.conf:/etc/nginx/sites-enabled/vhost-api.rusaddress.conf
        ports:
          - "127.0.0.150:8090:90"
        depends_on:
          - app
        expose:
          - "90"
        command: ["nginx", "-g", "daemon off;"]
    ...


    Конфигурация сервера который крутится в докере
    /docker/nginx/sites-enabled/vhost-api.rusaddress.conf
    server {
        listen                          90;
    
        client_max_body_size            208M;
        access_log                      /var/log/nginx/api.access.log;
        root                            /www/public;
    
        location / {
            try_files                   $uri $uri/ /api.php?$query_string;
        }
    
        location ~ \.php$ {
            fastcgi_split_path_info     ^(.+\.php)(/.+)$;
            fastcgi_pass                app:9000;
            fastcgi_index               api.php;
            include                     fastcgi_params;
            fastcgi_param               SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param               PATH_INFO $fastcgi_path_info;
        }
    }


    Теперь у меня сайт доступен локально
    по адресу 127.0.0.150:8090

    Как я понял, у Вас именно с этим проблема.

    Теперь нам как то нужно открыть внешний доступ, для этого делаем следующее...

    На реальном хосте, настраиваем nginx

    server {
        listen      			%ip%:%httpport%;
        server_name 		api.rusaddress.local;
       
        access_log  			"%sprogdir%/userdata/logs/api.rusaddress.local.access.log combined";
        error_log   			"%sprogdir%/userdata/logs/api.rusaddress.local.error.log error";
    	
    	add_header				"Access-Control-Allow-Origin" "*";
    	add_header				"Access-Control-Allow-Headers" "Origin, X-Requested-With, Content-Type, Accept, Authorization";
    	add_header				"Access-Control-Request-Methods" "GET, POST, OPTIONS";
    
        location / {
    	proxy_pass  		http://127.0.0.150:8090;	
            proxy_set_header	Host $host;
            proxy_set_header	X-Real-IP $remote_addr;
            proxy_set_header	X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header	X-Forwarded-Host $server_name;
        }
    }


    Обратите внимание на адрес 127.0.0.150:8090

    Теперь сайт доступен по api.rusaddress.local

    api.rusaddress.local <---- это ваш публичный адрес

    В моём случае локальный, так как я это сделал для себя, для разработки.
    Восстановил картину, как это будет работать на реальном сервере.
    Ответ написан
    1 комментарий
  • Как заставить apache/nginx под докером работать вместе с локальным nginx?

    athacker
    @athacker
    Товарищ выше в целом верно говорит, только не обязательно для этого docker-compose использовать. Запустите контейнер со старым приложением с указанием ключа -p 8080:80. Тогда 80-ый порт контейнера будет доступен на 8080 порту хоста. Соответственно, снаружи можете подключаться к этому порту: http://my_host_ip:8080 -- и попадёте в своё старое приложение.
    Ответ написан
    1 комментарий