Bezieht sich Ihre Feature-Anfrage auf ein Problem?
So'ne Art. Ich möchte SSL mit nginx beenden und es gleichzeitig als Reverse-Proxy anwenden. Ich sehe kein Beispiel dafür in den Dokumenten, auch wenn ich denke, dass es ein ziemlich häufiges Szenario ist.
Beschreiben Sie die gewünschte Lösung
Nur eine Beispielkonfiguration zum Beenden von SSL mit Reverse-Proxy
Beschreiben Sie Alternativen, die Sie in Betracht gezogen haben
Ich habe überlegt, Nginx-Reverse-Proxy mit SSL-Terminierung ohne diese Rolle anzuwenden. Wie das manuelle Konfigurieren von nginx, wenn dies zu schwierig ist.
Sie können die Beispiele nehmen und sie mit den dict-Objekten aus den Standardeinstellungen der Vorlagen erweitern: https://github.com/nginxinc/ansible-role-nginx/blob/master/defaults/main/template.yml
Etwas wie das:
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
Ich habe SSL-Chiffren, dhparam, proxy_set_header usw. weggelassen, da ich sie in der Hauptkonfiguration gesetzt habe, aber Sie können sie einfach aus den Beispielen oder Standardwerten übernehmen. Gleiches gilt für die Verwendung von Upstreams.
@xTrekStorex hat vollkommen recht. Irgendwann hätte ich auch gerne Arbeitsbeispiele für die meisten Anwendungsfälle, die in Molecule-Playbooks behandelt werden, einschließlich SSL (mit selbstsignierten Zertifikaten), wenn möglich.
Ich versuche, diese Konfiguration unten ohne Glück zu generieren. Ich frage mich, ob es unterstützt wird.
Standort /app1/ {
Proxy_pass http://localhost :6000;
}
Standort /app2/ {
Proxy_pass http://localhost :5000;
}
Sollte auf jeden Fall funktionieren. Verwenden Sie die neueste Version oder Hauptversion? Wenn Sie auf main sind, überprüfen Sie https://github.com/nginxinc/ansible-role-nginx-config/blob/main/molecule/default/converge.yml#L153 -L290 – Sie werden sehen, dass es zwei Positionsblöcke mit proxy_pass
gibt location
und proxy_pass
festlegen. (Nebenbemerkung: Vielleicht möchten Sie ein neues Problem erstellen, Ihre Frage bezieht sich nicht auf ssl
, soweit ich das beurteilen kann.)
Ich kann auch keinen einfachen Reverse-Proxy konfigurieren. Im obigen Beispiel erkenne ich die nicht
reverse_proxy:
Sektion.
Wenn ich versuche, auf einem von mir definierten Server proxy_pass anstelle von root zu verwenden, bekomme ich
TemplateAssertionError: no test named 'boolean'
Ein funktionierendes Beispiel wäre wünschenswert.
Der Abschnitt reverse_proxy
existiert nicht mehr. Es wurde in die proxy
Wörterbücher umgestaltet, die Sie jetzt auf main
(und 0.4.0
) finden können. Haben Sie die Molekülbeispiele im vorherigen Kommentar überprüft? Außerdem ist proxy_pass
in einem Serverkontext nicht erlaubt. Es muss sich immer in einem location
https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass befinden.
Beispiel:
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
Das führt zu
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'"}
Richtig. Versuchen Sie, auf die neueste Version von Jinja2 zu aktualisieren. Die Vorlagen erfordern Jinja2 2.11.x
, um richtig zu funktionieren. Dies hängt höchstwahrscheinlich mit den Fehlern zusammen, die Sie auf https://github.com/nginxinc/ansible-role-nginx-config/issues/94 gefunden haben.
Danke schön. Existiert es als Paket für Ubuntu 20.04? Was ist sonst die empfohlene Update-Methode?
Jinja2 ist ein Python-Paket. Sie können versuchen, pip install -U Jinja2
. Hier können Sie mehr lesen https://jinja.palletsprojects.com/en/2.11.x/intro/#installation
Hallo,
Das gleiche Problem mit Python 2.7 und Ansible 2.9.6:
"TemplateAssertionError: no test named 'boolean'"
Auf Python 3.6 und Ansible 2.9.6 funktioniert alles einwandfrei.
Variablen:
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
Ergebnisse zu:
+#
+# 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;
+}
Versuchen Sie, Jinja2 zu aktualisieren. Sie verwenden nicht die neueste Version (v2.11).
@alessfg Danke!
Es gab keine rote Ausgabe, also habe ich nicht bemerkt, dass ich tatsächlich Probleme habe, Jinja2 lokal zu aktualisieren:
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.
In einer sauberen virtuellen Umgebung mit Python 2.7 und Jinja2 2.11.3 funktioniert alles einwandfrei:
(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
Hilfreichster Kommentar
Sie können die Beispiele nehmen und sie mit den dict-Objekten aus den Standardeinstellungen der Vorlagen erweitern: https://github.com/nginxinc/ansible-role-nginx/blob/master/defaults/main/template.yml
Etwas wie das:
Ich habe SSL-Chiffren, dhparam, proxy_set_header usw. weggelassen, da ich sie in der Hauptkonfiguration gesetzt habe, aber Sie können sie einfach aus den Beispielen oder Standardwerten übernehmen. Gleiches gilt für die Verwendung von Upstreams.