Votre demande de fonctionnalité est-elle liée à un problème ?
Type de. Je souhaite mettre fin à ssl avec nginx et l'appliquer simultanément en tant que proxy inverse. Je ne vois pas d'exemple de cela dans la documentation, même si je pense que c'est un scénario assez courant.
Décrivez la solution que vous souhaitez
Juste un exemple de configuration sur la façon de mettre fin à SSL avec un proxy inverse
Décrivez les alternatives que vous avez envisagées
J'ai envisagé d'appliquer le proxy inverse nginx avec terminaison ssl sans ce rôle. Comme simplement configurer manuellement nginx, si c'est trop difficile avec ça.
Vous pouvez prendre les exemples et les développer avec les objets dict tirés des valeurs par défaut des modèles : https://github.com/nginxinc/ansible-role-nginx/blob/master/defaults/main/template.yml
Quelque chose comme ça:
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
J'ai laissé de côté les chiffrements ssl, dhparam, proxy_set_header, etc. puisque je les ai définis dans la configuration principale, mais vous pouvez simplement les prendre à partir des exemples ou des valeurs par défaut. Idem pour l'utilisation des amonts.
@xTrekStorex a tout à fait raison. À un moment donné, j'aimerais également avoir des exemples de travail pour la plupart des cas d'utilisation couverts dans les playbooks Molecule, y compris SSL (en utilisant des certificats auto-signés) si possible.
J'essaie de générer cette configuration ci-dessous sans succès. Je me demande si c'est supporté.
emplacement /app1/ {
proxy_pass http://localhost :6000;
}
emplacement /app2/ {
proxy_pass http://localhost :5000;
}
Devrait certainement fonctionner. Utilisez-vous la dernière version ou principale ? Si sur main, vérifiez https://github.com/nginxinc/ansible-role-nginx-config/blob/main/molecule/default/converge.yml#L153 -L290 - vous verrez qu'il y a deux blocs d'emplacement avec proxy_pass
. Vous pouvez supprimer toutes les autres variables en cours de test et définir les valeurs que vous avez mentionnées pour location
et proxy_pass
. (Remarque : vous voudrez peut-être créer un nouveau problème, votre question n'est pas liée à ssl
pour autant que je sache.)
Je suis également incapable de configurer un proxy inverse simple. Dans l'exemple ci-dessus, je ne reconnais pas le
reverse_proxy :
section.
Lorsque j'essaie d'utiliser proxy_pass au lieu de root sur un serveur que j'ai défini, j'obtiens
TemplateAssertionError: no test named 'boolean'
Un exemple de travail serait apprécié.
La section reverse_proxy
n'existe plus. Il a été refactorisé dans les dictionnaires proxy
que vous pouvez maintenant trouver sur main
(et 0.4.0
). Avez-vous vérifié les exemples de molécules dans le commentaire précédent ? De plus, proxy_pass
n'est pas autorisé dans un contexte de serveur. Il doit toujours être dans un location
https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass.
Exemple:
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
Cela se traduit par
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'"}
À droite. Essayez de mettre à jour vers la dernière version de Jinja2. Les modèles nécessitent Jinja2 2.11.x
pour fonctionner correctement. Ceci est probablement lié aux erreurs que vous avez trouvées sur https://github.com/nginxinc/ansible-role-nginx-config/issues/94.
Merci. Existe-t-il en tant que package pour Ubuntu 20.04 ? Sinon, quelle est la méthode de mise à jour recommandée ?
Jinja2 est un package Python. Vous pouvez essayer d'exécuter pip install -U Jinja2
. Vous pouvez en savoir plus ici https://jinja.palletsprojects.com/en/2.11.x/intro/#installation
Bonjour,
Ayant le même problème sur python 2.7 et ansible 2.9.6 :
"TemplateAssertionError: no test named 'boolean'"
Sur python 3.6 et ansible 2.9.6, tout fonctionne bien.
Variable :
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
Résultats à :
+#
+# 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;
+}
Essayez de mettre à jour Jinja2. Vous n'utilisez pas la dernière version (v2.11).
@alessfg Merci !
Il n'y avait pas de sortie rouge, donc je n'ai pas remarqué que j'avais des problèmes pour mettre à jour Jinja2 localement :
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.
Dans un environnement virtuel propre avec Python 2.7 et Jinja2 2.11.3, tout fonctionne correctement :
(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
Commentaire le plus utile
Vous pouvez prendre les exemples et les développer avec les objets dict tirés des valeurs par défaut des modèles : https://github.com/nginxinc/ansible-role-nginx/blob/master/defaults/main/template.yml
Quelque chose comme ça:
J'ai laissé de côté les chiffrements ssl, dhparam, proxy_set_header, etc. puisque je les ai définis dans la configuration principale, mais vous pouvez simplement les prendre à partir des exemples ou des valeurs par défaut. Idem pour l'utilisation des amonts.