کانفیگ فایل، دایرکتیو ها، کانتکست ها و محتوای استاتیک در انجینکس | Configuration, Directives, Context and Static Content with Nginx
توی این مقاله میخوایم یادبگیریم که چطوری فایل کانفیگ پیشفرض انجینکس رو تغییر بدیم و با دایرکتیوها و کانتکستها و همچنین ارائه محتوای استاتیک آشنا بشیم.
خب اول از همه اینکه وب سرور انجینکس یک فایل کانفیگوریشن دیفالت داره به اسم default که در مسیر /etc/nginx/conf.d/ یا /etc/nginx/sites-available/ قرار داره. (ممکنه در سایر توزیعهای گنو/لینوکسی این فایل و دایرکتوری وجود نداشته باشه)
- این دو دایرکتوری معمولا بصورت پیشفرض در فایل کانفیگ سراسری (global) که اسمش nginx.conf هستش و در مسیر /etc/nginx قرار داره، اینکلود (include) شدن.
اول وارد دایرکتوری میشیم به این شکل: cd /etc/nginx/conf.d یا cd /etc/nginx/sites-available، حالا با دستور sudo mv default default.bak اسم این فایل رو به default.bak تغییر میدیم و میذاریمش یه گوشه و کاریش نداریم. در مقاله خودش بهش میپردازیم.
حالا یه فایل با همون اسم میسازیم، من از این کامند استفاده میکنم: sudo nano default.
وقتش رسیده که بریم سراغ کانفیگ، به قطعه کد زیر دقت کنید.
server { listen 80 default_server; server_name www.dailynginx.ir; location /hello { index index.html index.htm; root /var/www/html; } }
توی کانفیگ بالا گفتیم که روی پورت ۸۰ در مسیر /var/www/html فایلها رو serve کن.
خط اول یک بلاک یا کانتکست سرور هستش که درواقع یه سرور یا هاست تعریف میکنه و میگه که به گوش باش (listen) روی پورت ۸۰ و به عنوان کانفیگ دیفالت (default_server) در نظرش بگیر. یعنی چی؟ یعنی اینکه اگر ما چندین تا فایل کانفیگ هم داشته باشیم بصورت پیشفرض هر درخواستی که برروی پورت ۸۰ بیاد به سمت اون کانفیگی که پارامتر default_server رو براش تعریف کردیم میره.
خب خصوصیت یا دایرکتیو بعدی server_name هستش، سرور نیم درواقع آدرس دامنه یا بهتر بگم جایی هستش که قراره ریکوئست به سمتش بره. اینجا من گذاشتم www.dailynginx.ir، یعنی اینکه آقای انجینکس هر درخواستی به سمتت اومد و آدرسش dailynginx.ir بود رو باید این فایل کانفیگی که برات تعریف کردم قبولش کنه و بهش ریسپانس بده.
اینجا شما میتونید آدرس سایتتون رو هم با www و هم بدون www وارد کنید. به این شکل:
server {
listen 80 default_server;
server_name www.dailynginx.ir dailynginx.ir;
location /hello {
index index.html index.htm;
root /var/www/html;
}
}
یه نکته مهم
اگر پارامتر default_server رو تعریف کرده باشید server_name دیگه عملا کاربردی نداره، چون هر درخواستی که روی پورت ۸۰ بیاد میره سمت این کانفیگ فایل.
بلاک یا کانتکست بعدی location هستش، کار لوکیشن چیه؟ هر سایتی یه دامنه (domain) داره مثل dailynginx.ir، حالا هر سایتی کلی آدرس و صفحات مختلف داره مثلا dailynginx.ir/hello-nginx.
کار لوکیشن اینه که براساس آدرسهای وارد شده بعد از دامنه (domain)، یعنی هرچیزی که بعد از dailynginx.ir وارد شه رو بخونه و اگر لوکیشنی مطابق با اون داشت، بیاد و یه سری کار انجام بده.
مثلا توی مثال بالا نوشته شده: location /hello
یعنی اینکه اگر آدرس dailynginx.ir/hello وارد شد بیا دستوراتی که توی بلاک یا کانتکست location /hello تعریف شده رو اجرا کن.
خب حالا میریم ببینیم داخل بلاک یا کانتکست لوکیشن چه خبره.
دایرکتیو index چیه؟
ایندکس به این معنی هستش که اول فایلهایی که بهت معرفی کردم رو اجرا کن. اینجا ما گفتیم index.html index.htm. یعنی اینکه اول بگرد ببین فایلی به نام index.html داری یا نه اگر نداشتی بگرد دنبال index.htm و اگر جفتشو نداشتی کلا لیست فایلها رو نشون بده یا کار دیگه انجام بده.
دایرکتیو root چیه؟
روت به مسیری که سورس کد پروژمون قرار داره گفته میشه. یعنی اینکه وقتی من میزنم dailynginx.ir/hello برو توی مسیر /var/www/html و بگرد دنبال فایل هایی که توی index تعریف کردیم و اجراش کن.
خب به همین سادگی، یاد گرفتیم که چطوری یک کانفیگ فایل توی انجینکس ایجاد میشه و با مفهوم دیفالت سرور و لوکیشن و سرور نیم و … آشناشدیم.
اگر مطالب مفید بودن با نظراتتون خوشحالمون کنید 🙂