هل طلب الميزة الخاص بك متعلق بمشكلة؟
نوعا من. أرغب في إنهاء ssl بـ nginx ، وتطبيقه في نفس الوقت كبديل عكسي. لا أرى مثالًا على ذلك في المستندات ، حتى أنني أعتقد أنه سيناريو شائع جدًا.
صِف الحل الذي تريده
مجرد مثال على التكوين حول كيفية إنهاء SSL باستخدام وكيل عكسي
صِف البدائل التي فكرت فيها
لقد فكرت في تطبيق nginx reverse proxy مع إنهاء ssl بدون هذا الدور. مثل ضبط nginx يدويًا ، إذا كان الأمر صعبًا جدًا مع هذا.
يمكنك أخذ الأمثلة وتوسيعها باستخدام كائنات ديكت المأخوذة من الإعدادات الافتراضية للقوالب: https://github.com/nginxinc/ansible-role-nginx/blob/master/defaults/main/template.yml
شيء من هذا القبيل:
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
لقد تركت أصفار ssl و dhparam و proxy_set_header وما إلى ذلك منذ أن قمت بتعيينها في التكوين الرئيسي ، ولكن يمكنك فقط أخذها من الأمثلة أو الإعدادات الافتراضية. نفس الشيء لاستخدام المنبع.
xTrekStorex صحيح تمامًا. في مرحلة ما ، أرغب أيضًا في الحصول على أمثلة عملية لمعظم حالات الاستخدام المغطاة في كتيبات لعب Molecule ، بما في ذلك SSL (باستخدام الشهادات الموقعة ذاتيًا) إن أمكن.
أحاول إنشاء هذا التكوين أدناه بدون حظ. أتساءل عما إذا كان مدعومًا.
الموقع / التطبيق 1 / {
proxy_pass http: // localhost : 6000 ؛
}
الموقع / التطبيق 2 / {
proxy_pass http: // localhost : 5000 ؛
}
يجب أن تعمل بالتأكيد. هل تستخدم أحدث إصدار أم رئيسي؟ إذا كان على main ، فتحقق من https://github.com/nginxinc/ansible-role-nginx-config/blob/main/molecule/default/converge.yml#L153 -L290 - سترى أن هناك كتلتان للمواقع بـ proxy_pass
. يمكنك حذف جميع المتغيرات الأخرى التي يتم اختبارها وتعيين القيم التي ذكرتها لـ location
و proxy_pass
. (ملاحظة جانبية: قد ترغب في إنشاء عدد جديد ، سؤالك ليس متعلقًا بـ ssl
بقدر ما أستطيع أن أخبرك.)
أنا أيضًا غير قادر على تكوين وكيل عكسي بسيط. في المثال أعلاه لا أتعرف على
عكسي:
الجزء.
عندما أحاول استخدام proxy_pass بدلاً من الجذر على خادم قمت بتحديده
TemplateAssertionError: no test named 'boolean'
سيكون موضع تقدير مثال عملي.
لم يعد القسم reverse_proxy
موجودًا. تمت إعادة تشكيله في قواميس proxy
التي يمكنك العثور عليها الآن في main
(و 0.4.0
). هل قمت بفحص أمثلة الجزيء في التعليق السابق؟ بالإضافة إلى ذلك ، proxy_pass
غير مسموح به ضمن سياق الخادم. يجب أن يكون دائمًا داخل location
https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass.
مثال:
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
وينتج عنه
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'"}
حق. حاول التحديث إلى أحدث إصدار من Jinja2. تتطلب القوالب Jinja2 2.11.x
لتعمل بشكل صحيح. يرتبط هذا على الأرجح بالأخطاء التي عثرت عليها على https://github.com/nginxinc/ansible-role-nginx-config/issues/94.
شكرا لك. هل هو موجود كحزمة لـ Ubuntu 20.04؟ وإلا ما هي طريقة التحديث الموصى بها؟
Jinja2 عبارة عن حزمة Python. يمكنك محاولة تشغيل pip install -U Jinja2
. يمكنك قراءة المزيد هنا https://jinja.palletsprojects.com/en/2.11.x/intro/#installation
مرحبا،
وجود نفس المشكلة في python 2.7 و ansible 2.9.6:
"TemplateAssertionError: no test named 'boolean'"
في python 3.6 و ansible 2.9.6 ، كل شيء يعمل بشكل جيد.
المتغيرات:
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
نتائج إلى:
+#
+# 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;
+}
حاول تحديث Jinja2. أنت لا تستخدم أحدث إصدار (v2.11).
alessfg شكرا!
لم يكن هناك إخراج أحمر ، لذلك لم ألاحظ أنني أواجه بالفعل مشكلات في تحديث Jinja2 محليًا:
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.
في بيئة افتراضية نظيفة مع Python 2.7 و Jinja2 2.11.3 ، كل شيء يعمل بشكل جيد:
(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
التعليق الأكثر فائدة
يمكنك أخذ الأمثلة وتوسيعها باستخدام كائنات ديكت المأخوذة من الإعدادات الافتراضية للقوالب: https://github.com/nginxinc/ansible-role-nginx/blob/master/defaults/main/template.yml
شيء من هذا القبيل:
لقد تركت أصفار ssl و dhparam و proxy_set_header وما إلى ذلك منذ أن قمت بتعيينها في التكوين الرئيسي ، ولكن يمكنك فقط أخذها من الأمثلة أو الإعدادات الافتراضية. نفس الشيء لاستخدام المنبع.