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.
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
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:
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.