لینوکس و شبکه

لینوکس و شبکه
طبقه بندی موضوعی
آخرین مطالب
  • ۹۹/۱۱/۱۳
    java

۳ مطلب با کلمه‌ی کلیدی «Nginx» ثبت شده است

۲۲
خرداد

رفع مشکل bad gateway


گاهی اوقات ممکن است بدون دلیل مشخص صفحات، خطای bad gateway بدهد.

برای حل این مشکل می‌بایست به لاگ خطا در نشانی /var/log/nginx/error.log مراجعه کرد. اگر مشکل به صورت زیر باشد:

upstream sent too big header while reading response header from upstream,

می‌بایست در در تنظیمات کانفیگ (/etc/nginx/nginx.conf) سه خط زیر را نیز اضافه نمود:

proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;

  • behrooz mohamadi nsasab
۲۲
خرداد

نکته: سرویس NginX همانند سرویس آپاچی در لینوکس و سرویس IIS در ویندوز است  که یک وب سرور به ما میدهد تا بتوانیم در بستر آن صفحات وب را به اشتراک بگذاریم


نصب: از دستورات package manager  سیستم عامل استفاده نمایید

Debian:  sudo apt-get install nginx
CentOS:  sudo yum install nginx

نکته: فایل های تنظیماتی سرویس  NginX  در مسیر etc/nginx قرار دارد

در فایل زیر:

/etc/nginx/nginx.conf

در خطی که با  عبارت  include آغاز میشود، مسیر زیر را مطابق نمونه قرار بدهید (در مسیر زیر برای هر دامنه یک فایل تنظیماتی بسازیم و کانفیگ هر سایت و یا دامنه را مجزا درون آن قرار دهید)

include /etc/nginx/site_available/*.conf;



یعنی در مسیر site_available به ازای هر فایلی که با پسوند conf وجود دارد و محتوی کانفیگ یک دامنه دلخواه است آن فایل خوانده می‌شود و یک دامنه را کانفیگ می‌کند.

بطور  مثال برای دامنه BMS  از فایل BMS.conf  در مسیر site-available  که در رهنگر مورد استفاده قرار میگرفته استفاده شد.


تمپلیت خوب برای استفاده در هر دامنه جدید:

upstream backend1  {
  ip_hash;
  server 172.16.85.237:8080 max_fails=3  fail_timeout=15s;
  server 172.16.85.238:8080 max_fails=3  fail_timeout=15s;
}
server {
        listen 80;
        server_name 172.16.85.244;
        client_max_body_size 250M;
 
location / {
        proxy_set_header X-Forwarded-Proto http;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://backend1;
        rewrite ^/$ /Ganjeh last;
       }
}



نکته:  کانفیگ بالا در فایل موجود در Site-available قرار خواهد گرفت.

بعنوان مثال برای فایل BMS.conf در رهنگر مشهد از شکل زیر استفاده شد:

#pstream backend  {
#  server 127.0.0.1:8080 ;
#}
server {
        listen 80;
        server_name 188.253.0.16;
        server_name mashhad.etrack.ir;
 
location / {
        proxy_set_header X-Forwarded-Proto http;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:8080/BMS;
       }
location /BMS {
        proxy_set_header X-Forwarded-Proto http;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:8080/BMS;
       }
 
location /MapCache {
        proxy_set_header X-Forwarded-Proto http;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:8080/MapCache;
       }
}


  • behrooz mohamadi nsasab
۲۲
خرداد

برای راه اندازی سرویس https در Nginx به روش زیر عمل کنید:

نکته: در هرباری که تغییری در تنظیمات انجام میدهید از دستور زیر استفاده نمایید تا مطمئن شوید که تغییرات درست بوده و موجب خطا نمیشود(سرویس را ریست ننمایید و از دستور زیر استفاده نمایید)

nginx -t

در زیر یک نمونه فایل config قبل ازآعمال تغییرات آورده شده تا تغییرات بوضوح مشاهده شود:

server {
         listen 80;
         server_name minitapp.ir;
         server_name www.minitapp.ir;
         client_max_body_size 300M;
         
         location / {
                proxy_pass http://192.168.2.101:8080/;
                proxy_set_header X-Forwarded-Proto https;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For
                $proxy_add_x_forwarded_for;
        }
}

همچنین بلاک زیر بعد از بروز تغییرات می‌باشد:

server {
         listen 80;                                                         # http port
         server_name minitapp.ir;                                           # domain
         server_name www.minitapp.ir;
         client_max_body_size 300M;
         return 301 https://$server_name$request_uri;                       # Redirect to (return301 means redirect)
}
 
server {
         listen 443;                                                                                 # https port
         server_name minitapp.ir;                                                         # domain
         server_name www.minitapp.ir;                                                # domain
         client_max_body_size 300M;
         ssl on;
         ssl_certificate /etc/nginx/sites-cert/minitapp.ir.pem;            # Pem(CertificateFile) file
         ssl_certificate_key /etc/nginx/sites-cert/minitapp.ir.key;      # Key(CertificateFile) file
         ssl_session_timeout  5m;                                                        # Optional
         ssl_protocols  TLSv1;                                                               # Optional
         ssl_ciphers  HIGH:!aNULL:!MD5;                                             # Optional
         ssl_prefer_server_ciphers   on;                                               # Optional
 
         location / {
                proxy_pass http://192.168.2.101:8080/;
                proxy_set_header X-Forwarded-Proto https;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For
                $proxy_add_x_forwarded_for;
        }
}

نکته: مسیر زیر یک مسیر دلخواه است که در سرور Nginx است که برای نگهداری فایل های ca در نظر گرفته شده است

/etc/nginx/sites-cert

نکته: return 301 به معنی این است که صفحات را به آدرس مورد نظر منتقل(redirect) کن

نکته: اگر بخواهیم فقط از سرویس https استفاده نماییم باید از داخل بلاک server با پورت 80 تمامی location ها را پاک کرده و به یک بلاک جدید با همان نام server و با شماره 443 (بجای 80) قرار دهیم (توجه شود که هیچ مقداری در location ها تغییر نخواهند کرد)-(توجه شود که directive با عنوان  proxy در تگ http مشاهده نشود)

نکته: اگر بخواهیم از هردو پروتکل http و https استفاده نماییم، آنگاه خط return 301 را از محل listen 80 حذف کرده و به بلاک های آن دست نمی‌زنیم.

  • behrooz mohamadi nsasab