Ansible-role-nginx-config: Contoh penghentian ssl dengan proxy terbalik nginx

Dibuat pada 24 Mei 2020  ·  13Komentar  ·  Sumber: nginxinc/ansible-role-nginx-config

Apakah permintaan fitur Anda terkait dengan masalah?
Agak. Saya ingin mengakhiri ssl dengan nginx, dan secara bersamaan menerapkannya sebagai proxy terbalik. Saya tidak melihat contoh ini di dokumen, bahkan saya pikir ini adalah skenario yang cukup umum.

Jelaskan solusi yang Anda inginkan
Hanya contoh konfigurasi tentang cara mengakhiri ssl dengan proxy terbalik

Jelaskan alternatif yang telah Anda pertimbangkan
Saya telah mempertimbangkan untuk menerapkan proxy terbalik nginx dengan penghentian ssl tanpa peran ini. Seperti hanya mengkonfigurasi nginx secara manual, jika terlalu sulit dengan ini.

documentation

Komentar yang paling membantu

Anda dapat mengambil contoh dan memperluasnya dengan objek dict yang diambil dari default template: https://github.com/nginxinc/ansible-role-nginx/blob/master/defaults/main/template.yml

Sesuatu seperti ini:

nginx_http_template_enable: true
nginx_http_template:
  jira_mydomain_net:
    conf_file_name: jira_mydomain_net.conf
    servers:
      first:
        listen:
          listen_public:
            ip: 0.0.0.0
            port: 443
            ssl: true
        server_name: jira.mydomain.net
        ssl:
          cert: /etc/ssl/certs/jira.mydomain.net.crt
          key: /etc/ssl/private/jira.mydomain.net.key
        access_log:
          - name: combined
            location: /var/log/nginx/jira.mydomain.net_access.log
        error_log:
          location: /var/log/nginx/jira.mydomain.net_error.log
          level: warn
        reverse_proxy:
          locations:
            default:
              location: /
              proxy_pass: http://jira01.local.mydomain.net:8080

Saya meninggalkan ssl cipher, dhparam, proxy_set_header dll karena saya mengaturnya di konfigurasi utama, tetapi Anda bisa mengambilnya dari contoh atau default. Sama untuk menggunakan hulu.

Semua 13 komentar

Anda dapat mengambil contoh dan memperluasnya dengan objek dict yang diambil dari default template: https://github.com/nginxinc/ansible-role-nginx/blob/master/defaults/main/template.yml

Sesuatu seperti ini:

nginx_http_template_enable: true
nginx_http_template:
  jira_mydomain_net:
    conf_file_name: jira_mydomain_net.conf
    servers:
      first:
        listen:
          listen_public:
            ip: 0.0.0.0
            port: 443
            ssl: true
        server_name: jira.mydomain.net
        ssl:
          cert: /etc/ssl/certs/jira.mydomain.net.crt
          key: /etc/ssl/private/jira.mydomain.net.key
        access_log:
          - name: combined
            location: /var/log/nginx/jira.mydomain.net_access.log
        error_log:
          location: /var/log/nginx/jira.mydomain.net_error.log
          level: warn
        reverse_proxy:
          locations:
            default:
              location: /
              proxy_pass: http://jira01.local.mydomain.net:8080

Saya meninggalkan ssl cipher, dhparam, proxy_set_header dll karena saya mengaturnya di konfigurasi utama, tetapi Anda bisa mengambilnya dari contoh atau default. Sama untuk menggunakan hulu.

@xTrekStorex sepenuhnya benar. Pada tahap tertentu saya juga ingin memiliki contoh kerja untuk sebagian besar kasus penggunaan yang tercakup dalam buku pedoman Molekul, termasuk SSL (menggunakan sertifikat yang ditandatangani sendiri) jika memungkinkan.

Saya mencoba membuat konfigurasi di bawah ini tanpa hasil. Saya ingin tahu apakah itu didukung.

lokasi /aplikasi1/ {
proxy_pass http://localhost :6000;
}
lokasi /app2/ {
proxy_pass http://localhost :5000;
}

Pasti harus bekerja. Apakah Anda menggunakan rilis terbaru atau utama? Jika di main, periksa https://github.com/nginxinc/ansible-role-nginx-config/blob/main/molecule/default/converge.yml#L153 -L290 -- Anda akan melihat ada dua blok lokasi dengan proxy_pass . Anda dapat menghapus semua variabel lain yang sedang diuji dan menetapkan nilai yang Anda sebutkan untuk location dan proxy_pass . (Catatan tambahan: mungkin ingin membuat masalah baru, pertanyaan Anda tidak terkait dengan ssl sejauh yang saya tahu.)

Saya juga tidak dapat mengonfigurasi proxy terbalik sederhana. Dalam contoh di atas saya tidak mengenali

reverse_proxy:

bagian.

Ketika saya mencoba menggunakan proxy_pass alih-alih root pada server yang telah saya tetapkan, saya mendapatkan

TemplateAssertionError: no test named 'boolean'

Sebuah contoh kerja akan dihargai.

Bagian reverse_proxy tidak ada lagi. Itu difaktorkan ulang ke dalam kamus proxy yang sekarang dapat Anda temukan di main (dan 0.4.0 ). Apakah Anda memeriksa contoh molekul di komentar sebelumnya? Selain itu, proxy_pass tidak diperbolehkan dalam konteks server. Itu selalu harus berada di dalam location https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass.

Contoh:

nginx_config_http_template_enable: true
    nginx_config_http_template:
      - template_file     : http/default.conf.j2
        conf_file_name    : '{{ my_server_name }}.conf'
        conf_file_location: /etc/nginx/conf.d/
        servers:
          - listen:
              - port: 443
                ssl : true
                opts: []
            server_name: '{{ my_server_name }}'
            ssl:
              cert                 : '/etc/ssl/certs/{{ my_ssl_prefix }}.nginx.bundle.crt'
              key                  : '/etc/ssl/private/{{ my_ssl_prefix }}.key'
              protocols            : '{{ NGINX_PROTOCOLS }}'
              prefer_server_ciphers: true
              ciphers              : '{{ NGINX_CIPHERS   }}'
              stapling             : true
              stapling_verify      : true
            autoindex : false
            locations :
              - location: /
                root    : '{{ my_root_folder }}'
              - location: /backend
                proxy_pass: http://127.0.0.1:8080/
                proxy:
                  set_header:
                     - field: Host
                       value: $host
                     - field: X-Real-IP
                       value: $remote_addr
                     - field: X-Forwarded-For
                       value: $proxy_add_x_forwarded_for
                     - field: X-Forwarded-Proto
                       value: $scheme

Ini menghasilkan

failed: [testing-snap05.MYDOMAIN.TLD] (item={'template_file': 'http/default.conf.j2', 'conf_file_name': 'testing-snap05.staging.MYDOMAIN.TLD.conf', 'conf_file_location': '/etc/nginx/conf.d/', 'servers': [{'listen': [{'port': 443, 'ssl': True, 'opts': []}], 'server_name': 'testing-snap05.staging.MYDOMAIN.TLD', 'ssl': {'cert': '/etc/ssl/certs/star.staging.MYDOMAIN.TLD.nginx.bundle.crt', 'key': '/etc/ssl/private/star.staging.MYDOMAIN.TLD.key', 'protocols': 'TLSv1.3', 'prefer_server_ciphers': True, 'ciphers': 'HIGH:!aNULL:!MD5', 'stapling': True, 'stapling_verify': True}, 'autoindex': False, 'locations': [{'location': '/', 'root': '/usr/share/nginx/html'}, {'location': '/backend', 'proxy_pass': 'http://127.0.0.1:8080/', 'proxy': {'set_header': [{'field': 'Host', 'value': '$host'}, {'field': 'X-Real-IP', 'value': '$remote_addr'}, {'field': 'X-Forwarded-For', 'value': '$proxy_add_x_forwarded_for'}, {'field': 'X-Forwarded-Proto', 'value': '$scheme'}]}}]}]}) => {"ansible_loop_var": "item", "changed": false, "item": {"conf_file_location": "/etc/nginx/conf.d/", "conf_file_name": "testing-snap05.staging.MYDOMAIN.TLD.conf", "servers": [{"autoindex": false, "listen": [{"opts": [], "port": 443, "ssl": true}], "locations": [{"location": "/", "root": "/usr/share/nginx/html"}, {"location": "/backend", "proxy": {"set_header": [{"field": "Host", "value": "$host"}, {"field": "X-Real-IP", "value": "$remote_addr"}, {"field": "X-Forwarded-For", "value": "$proxy_add_x_forwarded_for"}, {"field": "X-Forwarded-Proto", "value": "$scheme"}]}, "proxy_pass": "http://127.0.0.1:8080/"}], "server_name": "testing-snap05.staging.MYDOMAIN.TLD", "ssl": {"cert": "/etc/ssl/certs/star.staging.MYDOMAIN.TLD.nginx.bundle.crt", "ciphers": "HIGH:!aNULL:!MD5", "key": "/etc/ssl/private/star.staging.MYDOMAIN.TLD.key", "prefer_server_ciphers": true, "protocols": "TLSv1.3", "stapling": true, "stapling_verify": true}}], "template_file": "http/default.conf.j2"}, "msg": "TemplateAssertionError: no test named 'boolean'"}

Benar. Coba perbarui ke versi terbaru Jinja2. Template membutuhkan Jinja2 2.11.x untuk bekerja dengan baik. Ini kemungkinan besar terkait dengan kesalahan yang Anda temukan di https://github.com/nginxinc/ansible-role-nginx-config/issues/94.

Terima kasih. Apakah itu ada sebagai paket untuk Ubuntu 20.04? Kalau tidak, apa metode pembaruan yang disarankan?

Jinja2 adalah paket Python. Anda dapat mencoba menjalankan pip install -U Jinja2 . Anda dapat membaca lebih lanjut di sini https://jinja.palletsprojects.com/en/2.11.x/intro/#installation

Halo,

Memiliki masalah yang sama pada python 2.7 dan ansible 2.9.6:
"TemplateAssertionError: no test named 'boolean'"

Pada python 3.6 dan ansible 2.9.6 semuanya berfungsi dengan baik.

Variabel:

nginx_config_http_template_enable: true
nginx_config_http_template:
  - template_file: http/default.conf.j2
    conf_file_name: 50_example.com.conf
    conf_file_location: /etc/nginx/conf.d/

    servers:
      - listen:
          - ip: 0.0.0.0
            port: 80

          - ip: 0.0.0.0
            port: 443
            ssl: true

        ssl:    
          cert: /etc/pki/tls/certs/example.com.crt
          key: /etc/pki/tls/private/example.com.key

        server_name: example.com
        error_page: /usr/share/nginx/html
        autoindex: false
        http_demo_conf: false

        access_log:
          - name: json
            location: /var/log/nginx/example.com-access.json.log
        error_log:
          level: warn
          location: /var/log/nginx/example.com-error.log

        locations:
          - location: /
            proxy_pass: http://127.0.0.1
            proxy:
              bind: false
              set_header:
                - field: Host
                  value: $host
                - field: X-Forwarded-For
                  value: $proxy_add_x_forwarded_for
                - field: X-Real-IP
                  value: $remote_addr
                - field: REMOTE_ADDR
                  value: $remote_addr

Hasil ke:

+#
+# Ansible managed
+#
+
+
+
+
+server {
+    listen 0.0.0.0:80;
+    listen 0.0.0.0:443 ssl;
+    server_name example.com;
+    ssl_certificate /etc/pki/tls/certs/example.com.crt;
+    ssl_certificate_key /etc/pki/tls/private/example.com.key;
+    location / {
+        proxy_bind off;
+        proxy_set_header Host $host;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header REMOTE_ADDR $remote_addr;
+
+        proxy_pass http://127.0.0.1;
+
+    }
+    # redirect server error pages to the static page /50x.html
+    #
+    error_page   500 502 503 504  /50x.html;
+    location = /50x.html {
+        root   /usr/share/nginx/html;
+    }
+    access_log  /var/log/nginx/example.com-access.json.log  json;
+    error_log /var/log/nginx/example.com-error.log warn;
+}

Coba perbarui Jinja2. Anda tidak menggunakan rilis terbaru (v2.11).

@alessfg Terima kasih!

Tidak ada output merah, jadi saya tidak menyadari bahwa saya sebenarnya mengalami masalah saat memperbarui Jinja2 secara lokal:

bash-3.2$ pip install -U Jinja2
Collecting Jinja2
  Using cached https://files.pythonhosted.org/packages/7e/c2/1eece8c95ddbc9b1aeb64f5783a9e07a286de42191b7204d67b7496ddf35/Jinja2-2.11.3-py2.py3-none-any.whl
Requirement not upgraded as not directly required: MarkupSafe>=0.23 in /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages (from Jinja2) (0.23)
Installing collected packages: Jinja2
  Found existing installation: Jinja2 2.10.1
    Uninstalling Jinja2-2.10.1:
      Successfully uninstalled Jinja2-2.10.1
  Rolling back uninstall of Jinja2

You are using pip version 10.0.0, however version 20.3.4 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

Dalam virtualenv bersih dengan Python 2.7 dan Jinja2 2.11.3 semuanya berfungsi dengan baik:

(py27) bash-3.2$ pip freeze 
ansible==2.9.6
cffi==1.14.5
cryptography==3.3.2
enum34==1.1.10
ipaddress==1.0.23
Jinja2==2.11.3
MarkupSafe==1.1.1
pycparser==2.20
PyYAML==5.4.1
six==1.15.0
Apakah halaman ini membantu?
0 / 5 - 0 peringkat