nginx

استقرار Nginx

(Docker Apps)

Nginx یک HTTP server و reverse proxy متن باز و بسیار قدرتمند است که شما می‌توانید از آن به‌منظور کنترل و مدیریت ترافیک ورودی برنامه‌هایتان استفاده کنید.

در صورتی که تمایلی به خواندن آموزش متنی ندارید می‌توانید ویدیوی آموزشی زیر ‌را مشاهده کنید.

فایل‌های مورد استفاده در ویدیوی فوق، در گیت‌هاب لیارا قابل دسترسی هستند.

برای راه‌اندازی Nginx در برنامه‌های Docker لیارا کافیست یک پروژه‌ی جدید در مسیر دلخواه خود ایجاد کرده و دو فایل با نام‌های Dockerfile و nginx.conf را با محتوای مربوطه در این پروژه قرار دهید.

به عنوان مثال، در ادامه قطعه کدهای مربوطه برای اعمال reverse proxy بر روی یک برنامه، آمده است:

محتوای Dockerfile:

FROM nginx

COPY nginx.conf /etc/nginx/nginx.conf

محتوای nginx.conf:

user nginx;
worker_processes auto;

pid /tmp/nginx.pid;

events {

	worker_connections 1024;
}

http {

	client_body_temp_path /tmp/client_temp;
	proxy_temp_path /tmp/proxy_temp_path;
	fastcgi_temp_path /tmp/fastcgi_temp;
	uwsgi_temp_path /tmp/uwsgi_temp;
	scgi_temp_path /tmp/scgi_temp;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	log_format main '$request_method $status $http_x_forwarded_for "$request_uri" "$http_referer" "$http_user_agent"';

	server_tokens off;
	sendfile on;
	keepalive_timeout 65;
	gzip on;
	access_log /dev/stdout;
	error_log stderr;

	server {

		resolver 127.0.0.11 ipv6=off valid=5s;
		listen 80;
		location / {

			proxy_set_header Host $host;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			set $backend "http://app-name:port";
			proxy_pass $backend;
		}
	}
}
توجه داشته باشید که به‌منظور هدایت ترافیک باید شناسه و پورت برنامه‌ی مقصد خود را با مقادیر app-name و port در فایل nginx.conf جایگزین کنید.

درنهایت با اجرای دستور liara deploy --platform=docker --port=80 در مسیر اصلی پروژه، Nginx بر روی برنامه‌ی Docker تهیه شده مستقر خواهد شد.

توجه داشته باشید که هم برنامه داکر شامل Nginx و هم برنامه هدف شما حتماً باید درون یک شبکه خصوصی، قرار داشته باشند تا در نهایت بتوانند به یکدیگر، متصل شوند.

توضیحات و نکات تکمیلی

تنظیم مسیر tmp به‌عنوان مقصدی برای ذخیره‌ی فایل‌های موقتی

با مشاهده‌ی فایل nginx.conf متوجه خواهید که در موارد مختلف از مسیر tmp به‌عنوان مقصدی برای ذخیره‌ی فایل‌های موقتی استفاده شده است. البته شما می‌توانید مسیر دیگری را برای این‌کار انتخاب کنید؛ چرا که فایل‌سیستم برنامه‌های داکر در لیارا، به صورت پیش‌فرض، writable است، قطعه کد زیر، نمونه‌ای از تنظیم مسیر ذخیره‌سازی، به پوشه tmp است:

client_body_temp_path /tmp/client_temp;
proxy_temp_path       /tmp/proxy_temp_path;
fastcgi_temp_path     /tmp/fastcgi_temp;
uwsgi_temp_path       /tmp/uwsgi_temp;
scgi_temp_path        /tmp/scgi_temp;
تنظیم resolver

با توجه به احتمال تغییر IP برنامه در لیارا (در زیر ساخت قدیمی)، تنظیم resolver در فایل nginx.conf این امکان را به‌وجود می‌آورد تا هر بار IP جدید برنامه دریافت شده و مشکلی در هدایت ترافیک به‌وجود نیاید.

server {
  resolver 127.0.0.11 ipv6=off valid=5s;
  listen 80;
  location / {
  ...
  set $backend "http://app-name:port";
  proxy_pass $backend;
  }
}
;