English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
مقدمة
وظيفة وكيل Nginx وظيفة تحميل المتوازن هي الأكثر استخدامًا، وكانت الأساسيات النحوية والتكوينات المقدمة في المقالة السابقة، هذه المقالة ستكون مباشرة، وستصف بعض تكوينات الوظيفة وكذلك توضيح تحميل المتوازن.
توضيح تكوين خدمة وكيل Nginx
1. في المقالة السابقة، في مodule http لدينا تكوين التالي، عندما يواجه الوكيل حالة الرقم 404، نحن نوجه صفحة 404 إلى بaidu.
error_page 404 https://www.baidu.com; # صفحة الخطأ
وإلا فإن هذا التكوين، يمكن للصديق الحذر أن يلاحظ أنه لم يبدأ العمل
إذا كنا نريد أن يعمل، يجب أن نستخدم التكوين التالي معه
proxy_intercept_errors on; #如果被代理服务器返回的状态码为400或者大于400,设置的error_page配置起作用。默认为off。
2、如果我们的代理只允许接受get,post请求方法的一种
proxy_method get; #支持客户端的请求方法。post/get;
3、设置支持的http协议版本
proxy_http_version 1.0 ; #Nginx服务器提供代理服务的http协议版本1.0,1.1,默认设置为1.0版本
4、如果你的nginx服务器给2台web服务器做代理,负载均衡算法采用轮询,那么当你的一台机器web程序iis关闭,也就是说web不能访问,那么nginx服务器分发请求还是会给这台不能访问的web服务器,如果这里的响应连接时间过长,就会导致客户端的页面一直在等待响应,对用户来说体验就打打折扣,这里我们怎么避免这样的情况发生呢。这里我配张图来说明下问题。
如果负载均衡中其中web2发生这样的情况,nginx首先会去web1请求,但是nginx在配置不当的情况下会继续分发请求道web2,然后等待web2响应,直到我们的响应时间超时,才会把请求重新分发给web1,这里的响应时间如果过长,用户等待的时间就会越长。
al-maqramat al-thani min al-hallat al-hallat.
proxy_connect_timeout 1; #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒 proxy_read_timeout 1; #nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。 proxy_send_timeout 1; #nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。 proxy_ignore_client_abort on; #客户端断网时,nginx服务器是否终端对被代理服务器的请求。默认为off。
5, idha isthmalat amr al-upstream li'ishtirak al-maktabah bi'adad al-maktabah al-'ishara li'ishtirak al-qadam, al-qadam fi al-maktabah al-isti'mal fi al-hisab al-'istidarat al-istidarat al-isti'mal li'asir al-maktabah li'ishtirak al-qadam, wa yu'bud li'ishtirak al-amr li'ishtirak al-qadam fi istidarat al-ghayr min al-isti'mal al-ghayr min al-isti'mal.
proxy_next_upstream timeout; # al-isti'mal li'asir al-maktabah li'asir al-wajda, fi istidarat al-isti'mal li'asir al-maktabah li'ishtirak al-qadam, wa fi istidarat al-ghada'ah li'asir al-maktabah li'asir al-jawab. error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
6、إذا كنت ترغب في الحصول على IP الفعلي للعميل عبر http بدلاً من الحصول على عنوان IP للوكيل، فعليك إجراء الإعدادات التالية.
proxy_set_header Host $host; #إذا كان VIP الم绑定 إلى اسم النطاق الذي يزور المستخدم في المتصفح يحتوي على RS، فإنه يستخدم $host؛هو اسم النطاق والمنفذ في URL الطلب www.taobao.com:80 proxy_set_header X-Real-IP $remote_addr; #تعيين IP المصدر [$remote_addr، معلومات الرأس HTTP عند إنشاء اتصال HTTP] كـ X-Real-IP؛بهذا يمكن الحصول على IP المصدر باستخدام $X-Real-IP في الكود proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#في حالة استخدام nginx كخادم وكلاء، يتم تسجيل قائمة IP التي مرت عبرها، وإضافة IP الوكيل، باستخدام الفاصلة المائلة للفصل بينها؛في الكود يستخدم echo $x-forwarded-for |awk -F, '{print $1}' كـ IP المصدر
أوصي ببعض المقالات المتعلقة بX-Forwarded-For وX-Real-IP من صديق مدون: X-Forwarded-For في عنوان الطلب HTTP، هذا المدون يقدم سلسلة من المقالات حول بروتوكول HTTP، وأوصي بمراجعة هذا المدون.
7、هذا جزء من ملف تكوين الوكيل الخاص بي، فقط كنموذج للإشارة.
include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型,默认为text/plain #access_log off; #取消服务日志 log_format myFormat ' $remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式 access_log log/access.log myFormat; #combined为日志格式的默认值 sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。 sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。 keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。 proxy_connect_timeout 1; #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒 proxy_read_timeout 1; #nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。 proxy_send_timeout 1; #nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。 proxy_http_version 1.0 ; #Nginx服务器提供代理服务的http协议版本1.0,1.1,默认设置为1.0版本。 #proxy_method get; #支持客户端的请求方法。post/get; proxy_ignore_client_abort on; #客户端断网时,nginx服务器是否终端对被代理服务器的请求。默认为off。 proxy_ignore_headers "Expires" "Set-Cookie"; #Nginx服务器不处理设置的http相应投中的头域,这里空格隔开可以设置多个。 proxy_intercept_errors on; #如果被代理服务器返回的状态码为400或者大于400,设置的error_page配置起作用。默认为off。 proxy_headers_hash_max_size 1024; #存放http报文头的哈希表容量上限,默认为512个字符。 proxy_headers_hash_bucket_size 128; #nginx服务器申请存放http报文头的哈希表容量大小。默认为64个字符。 timeout; #反向代理upstream中设置的服务器组,出现故障时,被代理服务器返回的状态值。error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off #proxy_ssl_session_reuse on; الافتراضي هو on، إذا لاحظت في سجلات الأخطاء “SSL3_GET_FINSHED:digest check failed”، يمكنك تعيين هذا الأمر إلى off.
تفسير توازن Nginx
في المقال السابق ذكرت أنواع خوارزميات التوازن التي تدعمها nginx. في هذا المقال سأقدم شرحًا مفصلاً للتعامل مع تكويناتها.
أولاً، سأخبركم بشأن تكوين upstream هذا، هذا التكوين هو كتابة مجموعة من عناوين الخوادم التي سيتم تمرير الطلبات إليها، ثم تكوين خوارزمية التوازن. هناك طريقتان لكتابة عناوين الخوادم هنا.
upsream mysvr { server 192.168.10.121:3333; server 192.168.10.122:3333; {} server { .... location ~*^.+$ { proxy_pass http://mysvr; # تحويل الطلبات إلى قائمة الخوادم المحددة من قبل mysvr {}
upsream mysvr { server http://192.168.10.121:3333; server http://192.168.10.122:3333; {} server { .... location ~*^.+$ { proxy_pass mysvr; # تحويل الطلبات إلى قائمة الخوادم المحددة من قبل mysvr {}
ثم، نأتي إلى بعض الأمثلة العملية.
1- الاحتياطي: إذا كان لديك خادمين، يتم تفعيل الخادم الثاني فقط عند حدوث خطأ في الخادم الأول. وترتيب معالجة الخوادم للطلبات هو: AAAAAآخر A يتوقف، BBBBBBBBBBBBBB.....
upsream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; # احتياطي {}
2- التوازن الدائري: هو الافتراضي في nginx، ويكون كل وزن الخادم افتراضياً 1، وترتيب معالجة الخوادم للطلبات هو: ABABABABAB....
upsream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333; {}
3- التوازن الم加权: يتم توزيع عدد مختلف من الطلبات على الخوادم بناءً على حجم الأ权重 المحدد. إذا لم يتم تعيينه، فإن القيمة الافتراضية هي 1. ترتيب الخوادم في الطلب هو: ABBABBABBABBABB....
upsream mysvr { server 127.0.0.1:7878 weight=1; server 192.168.10.121:3333 weight=2; {}
4- ip_hash: ستجعل nginx توزع نفس عنوان IP للعملاء على نفس الخادم.
upsream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333; ip_hash; {}
5- إذا لم تفهم من الأربع طرق للتوازن التي ذكرتها أعلاه، فمن فضلك اقرأ المقال السابق الذي رفعت فيه الصور، قد يكون من السهل فهمه.
إلى هنا هل تشعر بأن تكوين تحميل nginx متساوٍ بسهولة وقوة، إذا لم يكن الأمر كذلك، دعونا نستمر، هنا نناقش الموضوع.
توضیح چندین پارامتر وضعیت برای پیکربندی توازن بار nginx.
upsream mysvr { سرور 127.0.0.1:7878 وزن=2 max_fails=2 fail_timeout=2; سرور 192.168.10.121:3333 وزن=1 max_fails=2 fail_timeout=1; {}
این باید بتوان گفت که الگوریتمهای توازن بار درونبخشی nginx دیگر موجود نیست. اگر میخواهید با الگوریتمهای توازن بار nginx بیشتر آشنا شوید، میتوانید برخی از پلاگینهای رسمی nginx را بررسی کنید.
این تمام محتوای این مقاله است، امیدوارم به شما در یادگیری کمک کند، و امیدوارم که همه شما از درسهای ناله بیشتری حمایت کنید.
اظهارنامه: محتوای این مقاله از اینترنت است، مالکیت آن به صاحبکار مربوط میشود، محتوای آن توسط کاربران اینترنت به صورت خودجوش ارائه شده و به صورت خودکار آپلود شده است، این وبسایت مالکیت ندارد، و مورد ویرایش دستی قرار نگرفته است و مسئولیت法律责任 مرتبط را ندارد. اگر محتوایی مشمول حقوق مالکیت معنوی پیدا کردید، خوشحال میشوم که ایمیل به آدرس notice#oldtoolbag.com ارسال کنید (هنگام ارسال ایمیل، لطفاً # را به @ تغییر دهید) و شواهد مربوطه را ارائه دهید، در صورت تأیید، این وبسایت محتوای مشمول حقوق مالکیت معنوی مرتبط را فوراً حذف خواهد کرد.