پیکربندی وب net/httpd/conf
خوانندهی پیکربندی سرور وب: بلوک، تنظیم و مقدار به قالب بلوکی سلام، همراه جایگاه برای خطاها.
واردسازی net.httpd.conf
این بسته متنی را میخواند که به قالب بلوکی پیکربندی net/httpd نوشته شده و یک درخت پس میدهد. از سرور وب چیزی نمیداند: فقط شکلها را میشناسد و اینکه کدام نامها معتبرند را net/httpd تعیین میکند. برای پروندههای تنظیم خودتان هم که شبیه سلاماند میتوانید از آن استفاده کنید.
دو شکل وجود دارد. تنظیم یعنی یک نام، علامت مساوی و یک یا چند مقدار در همان خط: max connections = 100. بلوک یعنی یک نام، رشتههای اختیاری، دونقطه، محتوا و end: location "/api/": cache = 1h end. نام میتواند چند واژه باشد (error page)، مقدارها رشته میان نقلقولاند (با \n، \t، \" و \\)، رشته میان پشتنقلقول (همانطور که نوشته شده خوانده میشود، پس عبارت باقاعده نیازی به دوبرابرکردن بکاسلش ندارد)، عدد با یکای اختیاری مثل 64mb یا 30d، و واژهی ساده مثل tls. توضیحها // تا آخر خط یا /* ... */ هستند.
همهچیز در یک Doc است، فهرستی از گرهها که با شماره به هم اشاره میکنند: گره ۰ ریشه است، Find و ChildAt پایین میروند و فیلدهای یک گره واژهها، برچسبها، مقدارها و فرزندانش را دارند. وقتی کارتان تمام شد سند را با Free آزاد کنید.
چیزهایی که مردم اشتباه میکنند:
- فهرست مقدارها در پایان خط، در
endیا جایی که تنظیم بعدی در همان خط شروع میشود تمام میشود، پسa = 1 b = 2دو تنظیم است. واژهی ساده در آخر فهرست مقدار حساب میشود، برای همینlisten = 443 tlsکار میکند. - تجزیه با اولین خطا میایستد و
okآنوقت نادرست است. خطا خط و ستون دارد وErrorTextآنها را مثل کامپایلرها جلوی پیام میگذارد. - نشانیها و هر چیزی که دونقطه دارد باید نقلقول داشته باشد:
listen = "127.0.0.1:8080". بدون آن دونقطه آغاز یک بلوک خوانده میشود. wordsیک گره نام آن را نگه میدارد، پسNameآنها را با یک فاصله به هم میچسباند. برچسب بلوکها، مثل مسیر یک location، درlabelsاست نه در نام.
گونهها
مقدار Value
ساختار مقدار| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نوع مقدار | kind | صحیح = 0 | VAL_WORD، VAL_STR یا VAL_NUM. |
| متن مقدار | text | رشته = "" | مقدار بهصورت متن؛ رشتهها بدون نقلقول و با گریزها باز شده. |
| خط مقدار | line | صحیح = 0 | خط، با شمارهگذاری از ۱. |
| ستون مقدار | col | صحیح = 0 | ستون، با شمارهگذاری از ۱. |
واردسازی شبکه.سرور وب.پیکربندی وب
تابع ریشه:
متن := `
server:
site:
listen = 80 tls
names = "a.test www.a.test"
location "/api/": cache = 1h end
end
end
`
د := پیکربندی وب.تجزیه(متن)
سرچاپ د.درست است، د.گره ها.طول()، پیکربندی وب.شمار فرزندان(د، پیکربندی وب.گره ریشه())
سر := پیکربندی وب.یافتن فرزند(د، پیکربندی وب.گره ریشه()، "server")
سا := پیکربندی وب.یافتن فرزند(د، سر، "site")
سرچاپ پیکربندی وب.نام(د، سا)، پیکربندی وب.شمار فرزندان(د، سا)، د.گره ها.بگیر(سا).بلوک است
ل := پیکربندی وب.یافتن فرزند(د، سا، "listen")
م := د.گره ها.بگیر(ل).مقدارها.بگیر(۰)
سرچاپ م.متن مقدار، م.نوع مقدار == پیکربندی وب.مقدار عددی، م.خط مقدار، م.ستون مقدار
وا := د.گره ها.بگیر(ل).مقدارها.بگیر(۱)
سرچاپ وا.متن مقدار، وا.نوع مقدار == پیکربندی وب.مقدار واژه، پیکربندی وب.متن مقدار گره(د، پیکربندی وب.یافتن فرزند(د، سا، "names")، ۰)
ن := د.گره ها.بگیر(پیکربندی وب.یافتن فرزند(د، سا، "names")).مقدارها.بگیر(۰)
سرچاپ ن.نوع مقدار == پیکربندی وب.مقدار رشته
مس := پیکربندی وب.فرزند شماره(د، سا، ۲)
ک := د.گره ها.بگیر(مس)
سرچاپ پیکربندی وب.نام(د، مس)، ک.برچسب ها.بگیر(۰)، ک.بلوک است، ک.واژه های نام.طول()، ک.فرزندان.طول()، ک.خط گره، ک.ستون گره
پیکربندی وب.آزاد سازی(د)
پایانگره Node
ساختار گره| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| بلوک است | block | منطقی = نادرست | برای بلوک درست و برای تنظیم نادرست. |
| واژه های نام | words | وکتور<رشته> | واژههای نام، مثل error و page. |
| برچسب ها | labels | وکتور<رشته> | رشتههایی که میان نام و دونقطهی یک بلوک نوشته شده. |
| مقدارها | values | وکتور<مقدار> | مقدارهای یک تنظیم. |
| فرزندان | children | وکتور<صحیح> | شمارهی گرههای درون یک بلوک. |
| خط گره | line | صحیح = 0 | خطی که از آن شروع میشود. |
| ستون گره | col | صحیح = 0 | ستونی که از آن شروع میشود. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
سند Doc
ساختار سند| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| گره ها | nodes | وکتور<گره> | همهی گرهها؛ گره ۰ ریشه است. |
| درست است | ok | منطقی = درست | اگر متن بدون خطا تجزیه شد درست. |
| پیام خطا | error | رشته = "" | پیام اولین خطا، و وقتی خطایی نیست خالی. |
| خط خطا | line | صحیح = 0 | خط خطا. |
| ستون خطا | col | صحیح = 0 | ستون خطا. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
پایاها و متغیرها
مقدار واژه VAL_WORD
پایا مقدار واژه: صحیح۳۲ = 0tls یا auto.نمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
مقدار رشته VAL_STR
پایا مقدار رشته: صحیح۳۲ = 1نمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
مقدار عددی VAL_NUM
پایا مقدار عددی: صحیح۳۲ = 28080 یا 30d؛ متن یکا را نگه میدارد.نمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
تابعها
تجزیه Parse
تابع تجزیه(text: رشته): سندok را بررسی کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
آزاد سازی Free
تابع آزاد سازی(d &: سند)نمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
متن خطا ErrorText
تابع متن خطا(d: سند، file: رشته): رشتهfile:line:column: message، یا رشتهی خالی اگر سند معتبر است. آرگومان اول نامی است که برای پرونده نشان داده میشود.واردسازی شبکه.سرور وب.پیکربندی وب
تابع نشانبده(متن: رشته):
د := پیکربندی وب.تجزیه(متن)
سرچاپ د.درست است، پیکربندی وب.متن خطا(د، "web.salam")، د.پیام خطا، د.خط خطا، د.ستون خطا
پیکربندی وب.آزاد سازی(د)
پایان
تابع ریشه:
نشانبده("server:\n site:\n")
نشانبده("server:\nend\nend\n")
نشانبده("listen = \n")
نشانبده("names = \"open\n")
نشانبده("listen 80\n")
نشانبده("a = 1 # no\n")
نشانبده("ok = 1\n")
پایاننام Name
تابع نام(d: سند، node: صحیح): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
گره ریشه Root
تابع گره ریشه(): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
شمار فرزندان Count
تابع شمار فرزندان(d: سند، node: صحیح): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
فرزند شماره ChildAt
تابع فرزند شماره(d: سند، node: صحیح، i: صحیح): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
یافتن فرزند Find
تابع یافتن فرزند(d: سند، node: صحیح، name: رشته): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam
متن مقدار گره ValueText
تابع متن مقدار گره(d: سند، node: صحیح، i: صحیح): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam