Điểm:0

KHÔNG thể liên kết cổng Máy chủ 14433 với cổng vùng chứa 433 bằng localhost, nhưng https hoạt động bằng IP vùng chứa (ví dụ: 172.21.0.2)

lá cờ bd

Khi tôi làm máy chủ lưu trữ linh miêu: 14080 từ máy chủ, nó hoạt động. Trang web được tải từ vùng chứa.

Khi tôi làm máy chủ lưu trữ linh miêu:14433 từ máy chủ, nó KHÔNG hoạt động.

Khi tôi làm linh miêu https://localhost:14433 từ máy chủ, nó KHÔNG hoạt động. Lỗi: Không thể tạo kết nối an toàn với máy chủ từ xa.

Vùng chứa đang chạy trên mạng cầu nối, được khởi chạy bởi docker-compose. IP của vùng chứa là: 172.21.0.2.

Nhưng khi tôi làm linh miêu https://172.21.0.2 NÓ HOẠT ĐỘNG...

...trang web được tải từ vùng chứa bằng chứng chỉ https và SSL. Tôi chỉ nhận được cảnh báo SSL:

172.21.02!=cert(CN<example.com>)-Tiếp tục?

...có nghĩa là CN của chứng chỉ không phù hợp với IP mà tôi đang cố mở, nhưng tôi vẫn có thể bỏ qua cảnh báo này và tiếp tục mở trang web.

Điều này có nghĩa là http đang hoạt động trên máy chủ cục bộ (và nó cũng hoạt động khi tôi sử dụng IP vùng chứa).

Nhưng https chỉ hoạt động khi tôi cố gắng kết nối bằng IP vùng chứa, nhưng nó không hoạt động khi tôi sử dụng máy chủ cục bộ.

Đây là lý do tại sao tôi nghĩ rằng có lỗi trong các liên kết cổng của các mạng được tạo bởi docker.

Tôi muốn có thể kết nối với bộ chứa bằng máy chủ cục bộ, vì vậy tôi không cần chỉ định IP mới của bộ chứa mỗi khi tôi khởi chạy lại bộ chứa, vì tôi đang định thiết lập proxy apache2 ngược trên máy chủ, vì vậy rằng thế giới bên ngoài có thể kết nối với trang web của tôi trong vùng chứa bằng https.

Đây là cài đặt Apache2 của tôi trên Máy chủ:

Tệp example.com.conf trong máy chủ apache conf của tôi:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin [email protected]
    CustomLog /var/www/docker/example.com/log/host/custom.log combined
    ErrorLog /var/www/docker/example.com/log/host/error.log
    Redirect permanent / https://example.com/
    ProxyRequests off
    ProxyPreserveHost On
    ProxyPass        "/" "http://172.21.0.2/"
    ProxyPassReverse "/" "http://172.21.0.2/"
</VirtualHost>

Tệp example.com-le-ssl.conf trong máy chủ apache conf của tôi:

<IfModule mod_ssl.c>
ErrorLog /var/www/docker/example.com/log/host/error.log
LogLevel debug
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    ProxyPreserveHost on
    ServerAdmin [email protected]
    LogLevel debug
    CustomLog /var/www/docker/example.com/log/host/custom.log combined
    ErrorLog /var/www/docker/example.com/log/host/error.log
    <If "%{HTTP_HOST} == 'www.example.com'">
      Redirect permanent / https://example.com/
    </If>
    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLProxyEngine on
    SSLEngine on
    ProxyRequests off
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass        "/" "http://172.21.0.2/"
    ProxyPassReverse "/" "http://172.21.0.2/"
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

Đây là conf apache của tôi trong vùng chứa:

Tệp default-ssl.conf trong máy chủ apache conf của tôi:

Tên máy chủ example.com

<VirtualHost _default_:80>
    Tên máy chủ example.com
    ServerAlias ​​www.example.com
    ServerADmin [email protected]
    Tài liệuRoot /var/www/html/www
    ErrorLog /var/log/container/error.log
    CustomLog /var/log/container/custom.log kết hợp
</Máy chủ ảo>

<IfModule mod_ssl.c>
Gỡ lỗi LogLevel
    <Máy chủ ảo _default_:443>
        Tên máy chủ example.com
        ServerAlias ​​www.example.com
        ServerAdmin [email protected]
        Tài liệuRoot /var/www/html/www
        Gỡ lỗi LogLevel
        ErrorLog /var/log/container/error.log
        CustomLog /var/log/container/custom.log kết hợp
        Bao gồm /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</Máy chủ ảo>
</IfModule>

Đây là tệp docker-compose.yml của tôi:

phiên bản: '3.7'

mạng:
  ứng dụng web ví dụ:
    tài xế: cầu

dịch vụ:
  giới thiệu:
    container_name: ví dụwebapp
    xây dựng:
      bối cảnh: ./
      dockerfile: dockerfile
      mục tiêu: nhà phát triển
    hình ảnh: ví dụwebapp
    khởi động lại: trừ khi dừng
    mạng:
      - ứng dụng web ví dụ
    cổng:
      **- "14433:433"
      - "14080:80"**
    working_dir: /var/www/html
    khối lượng:
      - ./container_apache_conf:/etc/apache2/sites-available
      - ./api:/var/www/html/api
      - ./archive:/var/www/html/archive
      - ./log/container:/var/log/container
      - ./log/host:/var/log/host
      - ./etc/letsencrypt:/etc/letsencrypt
      - ./www:/var/www/html/www

Đây là Dockerfile của tôi:

TỪ cơ sở php:7.4-Apache AS
CHẠY bản cập nhật apt-get
RUN mkdir -p /var/www/html/www # trang web sẽ được lưu tại đây
RUN mkdir -p /var/log/container # nhật ký apache sẽ được lưu tại đây
# kết nối mysql và quốc tế hóa cho php
CHẠY docker-php-ext-install mysqli
CHẠY docker-php-ext-enable mysqli
CHẠY cài đặt apt-get -y libicu-dev
CHẠY docker-php-ext-configure intl
CHẠY docker-php-ext-install intl
# kích hoạt https cho apache
CHẠY a2enmod ssl
CHẠY a2ensite default-ssl.conf


TỪ cơ sở AS dev
CHẠY pecl cài đặt xdebug-3.1.1
CHẠY docker-php-ext-enable xdebug

TỪ bài kiểm tra AS cơ bản

TỪ cơ sở AS prod

Đây là những gì được tạo ra bởi:

mạng docker kiểm tra examplecom_example


[
    {
        "Tên": "examplecom_example",
        "Id": "7311d1a7254466bd6ab44833362460cde4336ade622bca87def62bb3d840ef3f" ,
        "Đã tạo": "2022-02-13T21:16:34.861655456Z",
        "Phạm vi": "cục bộ",
        "Người lái xe": "cầu",
        "BậtIPv6": sai,
        "IPAM": {
            "Trình điều khiển": "mặc định",
            "Tùy chọn": không,
            "Cấu hình": [
                {
                    "Mạng con": "172.21.0.0/16",
                    "Cổng": "172.21.0.1"
                }
            ]
        },
        "Nội bộ": sai,
        "Có thể đính kèm": đúng,
        "Xâm nhập": sai,
        "Từ cấu hình": {
            "Mạng": ""
        },
        "Chỉ cấu hình": sai,
        "Hộp đựng": {
            "be53d5b37e2fbcaae49bb111b921dfd4caf5db20ed680403083333ffac983b93": {
                "Tên": "ví dụ",
                "ID điểm cuối": "fb1428d29e2fc9564b3e1758a7efac15909a897021320b15f 1df8c1d600efd89",
                "Địa chỉ Mac": "00:00:00:00:00:00",
                "Địa chỉ IPv4": "172.21.0.2/16",
                "Địa chỉ IPv6": ""
            },
    }
]

Đây là đầu ra của docker ps:

ID CONTAINER HÌNH ẢNH LỆNH TẠO TÊN CỔNG TRẠNG THÁI
ví dụ be53d5b37e2f "docker-php-entrypoiâ¦" 11 giờ trước Lên 11 giờ 443/tcp, 0.0.0.0:14080->80/tcp, :::14080->80/tcp, 0.0.0.0:14433->433 /tcp, :::14433->433/ví dụ tcp

Tôi đang sử dụng hình ảnh docker php chính thức.

Và trong phần soạn thảo docker, tôi đang tạo một mạng cầu nối và tôi đang lập bản đồ:

  • "14433:433"
  • "14080:80"

Câu hỏi của tôi là:

  1. Tại sao tôi có thể kết nối từ máy chủ đến vùng chứa của mình bằng cách sử dụng http trên http://127.0.0.1:14080, nhưng không sử dụng https trên https://127.0.0.1:14433, mặc dù cả hai cổng cho http và https (14080:80 và 14433:433) phải được ánh xạ theo cùng một cách? Và tại sao https vẫn hoạt động khi tôi kết nối với vùng chứa bằng https trên https://172.21.0.2.

  2. Tôi nên làm gì để có thể chuyển hướng lưu lượng truy cập https từ Máy chủ apache của tôi (dưới dạng proxy ngược), sang vùng chứa apache của tôi bằng localhost, tức là https://127.0.0.1:14433/ - để vùng chứa của tôi có thể được truy cập từ internet, cũng sử dụng https và vì vậy tôi không cần chỉ định IP của vùng chứa trong cấu hình máy chủ apache của proxy https đảo ngược?

Điểm:0
lá cờ in

Tại sao lại có những * này?

      **- "14433:433"
      - "14080:80"**

Hãy thử nó với

phiên bản: '3.7'

mạng:
  ứng dụng web ví dụ:
    tài xế: cầu

dịch vụ:
  giới thiệu:
    container_name: ví dụwebapp
    xây dựng:
      bối cảnh: ./
      dockerfile: dockerfile
      mục tiêu: nhà phát triển
    hình ảnh: ví dụwebapp
    khởi động lại: trừ khi dừng
    mạng: những
      - ứng dụng web ví dụ
    cổng:
      - "14433:433"
      - "14080:80"
    working_dir: /var/www/html
    khối lượng:
      - ./container_apache_conf:/etc/apache2/sites-available
      - ./api:/var/www/html/api
      - ./archive:/var/www/html/archive
      - ./log/container:/var/log/container
      - ./log/host:/vatheser/log/host
      - ./etc/letsencrypt:/etc/letsencrypt
      - ./www:/var/www/html/www

Và vui lòng hiển thị đầu ra của docker ps.

Và đối với Apache dưới dạng Proxy, mặc dù tôi nghe nói hiện nay nginx được ưa chuộng hơn nhưng bạn có thể sử dụng một Cấu hình như thế này.

<VirtualHost *:80>

ServerName your.vhost.tld

RewriteEngine on
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

ErrorLog ${APACHE_LOG_DIR}/your.vhost.tld-error.log
CustomLog ${APACHE_LOG_DIR}/your.vhost.tld-access.log vhost_combined

</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>

ServerName your.vhost.tld
<Proxy *>
order deny,allow
Allow from all
</Proxy>

SSLEngine on
SSLCertificateFile      /etc/apache2/ssl/your.vhost.tld/certificate.crt
SSLCertificateKeyFile   /etc/apache2/ssl/your.vhost.tld/certificate.key
#SSLCACertificateFile   /etc/apache2/ssl/your.vhost.tld/cert.cabundle

SetEnv           force-proxy-request-1.0 1
SetEnv           proxy-nokeepalive       1
SetEnv           proxy-initial-not-pooled 1

ErrorLog ${APACHE_LOG_DIR}/your.vhost.tld-error.log
CustomLog ${APACHE_LOG_DIR}/your.vhost.tld-access.log vhost_combined

ProxyTimeout 600
SSLProxyEngine On
#ProxyRequests On
#ProxyPreserveHost On
RewriteEngine off

#PROXY's
ProxyRequests Off
<Location "/">
ProxyPreserveHost On
ProxyPass https://localhost:14443
ProxyPassReverse https://localhost:14443
</VirtualHost>
</IfModule>
lá cờ bd
**- "14433:433" - "14080:80"** chỉ là lỗi chính tả do lỗi máy chủ. docker-compose.yml viết đúng chính tả mà không có **.
lá cờ bd
Sự khác biệt trong tệp docker-compose.yml là gì? Sự khác biệt duy nhất mà tôi có thể thấy là việc thêm "những" này sau "mạng:". Nhưng điều này gây ra lỗi cho tôi khi cố chạy docker Compose. LỖI: yaml.scanner.ScannerError: trong khi quét một phím đơn giản trong "./docker-compose.yml", dòng 16, cột 5 không thể tìm thấy mong đợi ':' trong "./docker-compose.yml", dòng 18, cột 5
lá cờ bd
openssl s_client -crlf -kết nối máy chủ cục bộ:14433 -tên máy chủ www.example.com Đưa cho tôi: ĐÃ KẾT NỐI(00000003) viết:errno=104 --- không có chứng chỉ ngang hàng --- Không có tên CA chứng chỉ ứng dụng khách nào được gửi --- Bắt tay SSL đã đọc 0 byte và ghi 310 byte Xác minh: OK --- Mới, (NONE), Mật mã là (NONE) Đàm phán lại an toàn KHÔNG được hỗ trợ Nén: KHÔNG CÓ Mở rộng: KHÔNG CÓ Không có ALPN nào được thương lượng Dữ liệu ban đầu không được gửi Xác minh mã trả về: 0 (ok) ---
lá cờ bd
Tôi đồng ý, nginx là cách ưa thích, nhưng tôi ngần ngại chạy nginx và apache2 trên cùng một máy và tôi cũng ngần ngại di chuyển tất cả các trang web khác sang docker hoặc nginx, vì chúng có rất nhiều máy chủ và cài đặt apache2
lá cờ bd
Tôi đã thử cài đặt của bạn nhưng lỗi vẫn còn. Lynx cho tôi: Cảnh báo!: Lỗi đọc mạng không mong muốn; kết nối bị hủy bỏ. Không thể truy cập `example.com' Cảnh báo!: Không thể truy cập tài liệu.
lá cờ bd
Tôi đã từ bỏ vấn đề và thử với nginx. Nó hoạt động. Bây giờ tôi sẽ chuyển mọi thứ sang nginx.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.