Terdapat beberapa bekas tapak web berbeza yang berjalan pada hos Docker Bagaimana untuk memajukan trafik port 80 dan 443 dengan betul ke bekas yang sepadan?
PHP中文网
PHP中文网 2017-06-20 10:05:52
0
2
1361

Bantuan. . Sekiranya terdapat tutorial yang ditulis oleh Dalao, anda juga boleh menyiarkan pautan ke artikel tersebut. . Selepas pusingan Baidu, saya koma. .

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(2)
習慣沉默

折腾了一个下午,找到了docker的解决方案
github:https://github.com/JrCs/docke...

把重要重点部分摘出来

Bekas Asingkan (kaedah yang disyorkan)

proksi nginx juga boleh dijalankan sebagai dua bekas berasingan menggunakan imej jwilder/docker-gen
dan imej nginx rasmi.

Anda mungkin mahu melakukan ini untuk mengelakkan soket docker terikat pada perkhidmatan kontena yang terdedah kepada umum (elakkan daripada memasang soket docker dalam bekas terdedah nginx). Ia lebih baik dari sudut keselamatan.

Untuk menjalankan proksi nginx sebagai bekas berasingan anda perlukan:

1) Untuk melekapkan fail templat nginx.tmpl ke dalam bekas docker-gen. Anda boleh mendapatkan nginx.tmpl rasmi terkini dengan arahan seperti:

curl https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl > /path/to/nginx.tmpl

2) Tetapkan NGINX_DOCKER_GEN_CONTAINER pembolehubah persekitaran kepada nama atau id bekas docker-gen.

Contoh:

  • Mulakan pertama nginx (imej rasmi) dengan jilid:

$ docker run -d -p 80:80 -p 443:443 \
    --name nginx \
    -v /etc/nginx/conf.d  \
    -v /etc/nginx/vhost.d \
    -v /usr/share/nginx/html \
    -v /path/to/certs:/etc/nginx/certs:ro \
    --label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true \
    nginx
  • Mulakan bekas gen docker dengan volum kongsi dan fail templat:

$ docker run -d \
    --name nginx-gen \
    --volumes-from nginx \
    -v /path/to/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro \
    -v /var/run/docker.sock:/tmp/docker.sock:ro \
    jwilder/docker-gen \
    -notify-sighup nginx -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
  • Kemudian mulakan bekas ini (pembolehubah NGINX_DOCKER_GEN_CONTAINER mesti mengandungi nama atau id kontena docker-gen):

$ docker run -d \
    --name nginx-letsencrypt \
    -e "NGINX_DOCKER_GEN_CONTAINER=nginx-gen" \
    --volumes-from nginx \
    -v /path/to/certs:/etc/nginx/certs:rw \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    jrcs/letsencrypt-nginx-proxy-companion

Kemudian mulakan mana-mana bekas untuk diproksikan seperti yang diterangkan sebelum ini.

  • Jika atas sebab tertentu anda tidak boleh menggunakan pilihan docker --volumes-from, anda boleh menentukan nama atau id bekas nginx dengan pembolehubah NGINX_PROXY_CONTAINER.

Jom Sulitkan

Untuk menggunakan perkhidmatan Let's Encrypt untuk mencipta sijil yang sah secara automatik untuk hos maya.

Tetapkan pembolehubah persekitaran berikut untuk membolehkan sokongan Let's Encrypt untuk bekas yang diproksikan. Pembolehubah persekitaran ini perlu diisytiharkan dalam setiap bekas aplikasi yang akan diproksikan.

  • LETSENCRYPT_HOST

  • LETSENCRYPT_EMAIL

Pembolehubah LETSENCRYPT_HOST variable most likely needs to be the same as the VIRTUAL_HOST berkemungkinan besar perlu sama dengan pembolehubah VIRTUAL_HOST dan mestilah domain yang boleh dicapai secara umum. Tentukan berbilang hos dengan pembatas koma.

Pembolehubah persekitaran berikut adalah pilihan dan parameterkan cara klien Let's Encrypt berfungsi.

  • LETSENCRYPT_KEYSIZE

Pembolehubah LETSENCRYPT_KEYSIZE menentukan saiz kunci yang diminta (dalam bit, lalai kepada 4096).

sijil berbilang domain (SAN)

Jika anda ingin mencipta sijil berbilang domain (SAN) tambahkan domain asas sebagai domain pertama bagi LETSENCRYPT_HOST pembolehubah persekitaran.

sijil ujian

Jika anda ingin mencipta sijil ujian yang tidak mempunyai had 5 sijil/minggu/domain tentukan LETSENCRYPT_TEST environment variable with a value of true (dalam bekas yang anda meminta sijil dengan LETSENCRYPT_HOST). Jika anda ingin melakukan ini secara global untuk semua bekas, tetapkan ACME_CA_URI seperti yang diterangkan di bawah.

Pembaharuan sijil automatik

Setiap jam (3600 saat) sijil disemak dan setiap sijil yang akan tamat tempoh dalam 30 hari akan datang (90 hari / 3) diperbaharui.

Contoh:
$ docker run -d \
    --name example-app \
    -e "VIRTUAL_HOST=example.com,www.example.com,mail.example.com" \
    -e "LETSENCRYPT_HOST=example.com,www.example.com,mail.example.com" \
    -e "LETSENCRYPT_EMAIL=foo@bar.com" \
    tutum/apache-php

Pembolehubah persekitaran kontena pilihan

Pilihan pembolehubah persekitaran bekas letsencrypt-nginx-proxy-companion untuk konfigurasi tersuai.

  • ACME_CA_URI - Directory URI for the CA ACME API endpoint (default: https://acme-v01.api.letsencrypt.org/directory). If you set it's value to https://acme-staging.api.letsencrypt.org/directory letsencrypt akan menggunakan pelayan ujian yang tidak mempunyai had 5 sijil/minggu/domain. Anda juga boleh membuat sijil ujian setiap bekas (lihat mari menyulitkan sijil ujian)

Sebagai contoh

$ docker run -d \
    -e "ACME_CA_URI=https://acme-staging.api.letsencrypt.org/directory" \
    -v /path/to/certs:/etc/nginx/certs:rw \
    --volumes-from nginx-proxy \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    jrcs/letsencrypt-nginx-proxy-companion
  • DEBUG - Set it to true untuk mendayakan penyahpepijatan skrip titik masuk dan penjanaan sijil LetsEncrypt, yang boleh membantu anda menetapkan sebarang isu konfigurasi.

  • Label "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true" - tetapkan label ini pada bekas nginx-proxy untuk memberitahu bekas docker-letsencrypt-nginx-proxy-companion untuk menggunakannya sebagai proksi.

  • ACME_TOS_HASH - Mari anda hantar cincang TOS alternatif kepada simp_le, untuk menyokong pelaksanaan ACME CA yang lain.

Contoh:

Jika anda mahu contoh lain cara menggunakan bekas ini, lihat:

  • Contoh Karl Fathi

  • Lagi contoh dari Karl

  • Contoh George Ilyes

  • Contoh karang docker yang mudah Dmitry

注意,这里有个坑,也怪我自己没看清楚,如果镜像已经expose端口就设置VIRTUAL_HOSTCRYTTY_HOSTCRYPTUAL_HOSTCRY行,如果没有就得在设置好三个环境变量之后自己加入--expose 容器内应用服务端口 参数启动。如果容器是discourse这样的,就得在app.yml内设置好环境变量之后把端:后把端后把端后占用端口:80,然后再保存重建启动。

大家讲道理

Memandangkan kontena hanya boleh mengikat port hos secara langsung, contohnya, saya mempunyai 10 kontena web, maka kontena ini semuanya memerlukan 80 atau 443, jadi parameter -p tidak boleh dilaksanakan, jadi sama ada gunakan bekas sebagai laluan terbalik bekas proksi, Gunakan nginx, bekas nginx untuk -p, dan bekas web lain seperti php-fpm dan node Akses melalui nginx sebagai proksi terbalik Sijil juga diserahkan terus kepada pelayan nginx dan penghantaran 443 boleh dicapai.

Sebenarnya, ini adalah asas, tetapi ia tiada kaitan dengan buruh pelabuhan

Artikel ini adalah persekitaran lnmp,
/a/11...

Jika terdapat berbilang perkhidmatan php-fpm atau nod atau python backend, maka nginx hendaklah seperti berikut

server{
  listen 80;
  server_name web1;
  location /{
    proxy_pass  ....
  }
}

server{
  listen 80;
  server_name web2;
  location /{
    proxy_pass  ....
  }

}

server{
  listen 80;
  server_name web3;
  location /{
    proxy_pass  ....
  }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan