āĻāĻŽāĻžāĻ° āĻāĻ āĻŦāĻ¨ā§āĻ§ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ āĻĒā§āĻ°ā§āĻ¤āĻŋāĻāĻ° āĻāĻāĻ¨āĻž āĻāĻā§āĻā§āĨ¤ āĻ¤āĻŦā§ āĻāĻāĻŋ āĻŽāĻŋāĻāĻžāĻāĻ˛ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¯āĻ¤āĻāĻž āĻ āĻĒā§āĻ°ā§āĻ¤āĻŋāĻāĻ° āĻāĻŋāĻ˛, āĻāĻāĻŋ āĻāĻŽāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻŋāĻ āĻ¤āĻ¤āĻāĻžāĻ āĻŦāĻŋāĻ¨ā§āĻĻāĻ¨āĻŽā§āĻ˛āĻ āĻāĻŋāĻ˛āĨ¤
āĻāĻŽāĻŋ āĻŦāĻ˛āĻ¤ā§āĻ āĻšāĻŦā§ āĻ¯ā§ āĻāĻŽāĻžāĻ° āĻŦāĻ¨ā§āĻ§ā§ āĻŦā§āĻļ āĻāĻāĻ¨āĻŋāĻā§āĻ¸-āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§: āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĻāĻŋ āĻ¨āĻŋāĻā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻŽāĻžāĻāĻāĻ¸āĻāĻŋāĻāĻāĻ˛, āĻĒāĻŋāĻāĻāĻāĻĒāĻŋ āĻāĻŦāĻ āĻ¸āĻšāĻ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻāĻ°ā§āĻ¨ nginx.
āĻāĻŦāĻ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ¸āĻ°āĻā§āĻāĻžāĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻŦā§āĻĻāĻŋāĻ¤ āĻāĻ āĻĄāĻāĻ¨ āĻŦāĻž āĻĻā§āĻĄāĻŧāĻāĻŋ āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻžāĻāĻ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻā§āĻāĻ¨āĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻŦā§āĻĻāĻŋāĻ¤ āĻāĻ āĻ¸āĻžāĻāĻāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ°ā§āĻ āĻāĻā§āĻāĻŋāĻ¨ā§āĻ° āĻļā§āĻ°ā§āĻˇā§ āĻĻā§āĻĸāĻŧāĻāĻžāĻŦā§ āĻŦāĻ¸ā§āĨ¤ āĻāĻ āĻ¸āĻžāĻāĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ
-āĻŦāĻžāĻŖāĻŋāĻā§āĻ¯āĻŋāĻ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻā§āĻ āĻāĻāĻŋāĻā§ āĻāĻā§āĻ°āĻŽāĻŖ āĻāĻ°āĻžāĻ° āĻ
āĻā§āĻ¯āĻžāĻ¸ āĻāĻ°ā§ āĻĢā§āĻ˛ā§āĻā§āĨ¤ āĻ¯ā§ DDoS, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¨ā§āĻļāĻāĻ¸ āĻŦāĻ˛, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¤āĻžāĻ°āĻž āĻ
āĻļā§āĻ˛ā§āĻ˛ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻ˛ā§āĻā§ āĻāĻŦāĻ āĻšā§āĻ¸ā§āĻāĻŋāĻ āĻāĻŦāĻ āĻāĻ°āĻā§āĻāĻ¨-āĻā§ āĻāĻžāĻ˛āĻžāĻāĻžāĻ˛āĻŋ āĻĒāĻžāĻ āĻžāĻ¯āĻŧāĨ¤
āĻšāĻ āĻžā§, āĻ¸āĻŦāĻāĻŋāĻā§ āĻļāĻžāĻ¨ā§āĻ¤ āĻšāĻ¯āĻŧā§ āĻā§āĻ˛ āĻāĻŦāĻ āĻāĻ āĻļāĻžāĻ¨ā§āĻ¤āĻāĻŋ āĻāĻžāĻ˛ āĻ¨āĻ¯āĻŧ āĻāĻŦāĻ āĻ¸āĻžāĻāĻāĻāĻŋ āĻ§ā§āĻ°ā§ āĻ§ā§āĻ°ā§ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻļā§āĻ°ā§āĻˇ āĻ˛āĻžāĻāĻ¨āĻā§āĻ˛āĻŋ āĻā§āĻĄāĻŧā§ āĻ¯ā§āĻ¤ā§ āĻļā§āĻ°ā§ āĻāĻ°ā§āĨ¤
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻŦāĻžāĻĻ āĻāĻŋāĻ˛, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ
ā§āĻ¯āĻžāĻĄāĻŽāĻŋāĻ¨ā§āĻ° āĻāĻ˛ā§āĻĒ āĻ¨āĻŋāĻā§āĻāĨ¤
āĻā§āĻŽā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ˛ āĻ¯āĻāĻ¨ āĻĢā§āĻ¨ āĻŦā§āĻā§ āĻāĻ āĻ˛: âāĻ¸āĻžāĻ¨, āĻ¤ā§āĻŽāĻŋ āĻāĻŋ āĻāĻŽāĻžāĻ° āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻĻāĻŋāĻā§ āĻ¤āĻžāĻāĻžāĻŦā§ āĻ¨āĻž? āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻŽāĻ¨ā§ āĻšāĻā§āĻā§ āĻāĻŽāĻŋ āĻšā§āĻ¯āĻžāĻ āĻšāĻ¯āĻŧā§āĻāĻŋ, āĻāĻŽāĻŋ āĻāĻāĻŋ āĻĒā§āĻ°āĻŽāĻžāĻŖ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻž, āĻ¤āĻŦā§ āĻ
āĻ¨ā§āĻā§āĻ¤āĻŋāĻāĻŋ āĻ¤ā§āĻ¤ā§āĻ¯āĻŧ āĻ¸āĻĒā§āĻ¤āĻžāĻšā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻā§ āĻā§āĻĄāĻŧā§ āĻ¯āĻžāĻ¯āĻŧāĻ¨āĻŋāĨ¤ āĻšāĻ¯āĻŧāĻ¤ā§ āĻāĻŽāĻžāĻ° āĻĒā§āĻ¯āĻžāĻ°āĻžāĻ¨āĻŋāĻ¯āĻŧāĻžāĻ° āĻāĻŋāĻāĻŋā§āĻ¸āĻž āĻ¨ā§āĻāĻ¯āĻŧāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ¸ā§āĻā§?
āĻāĻ°āĻĒāĻ° āĻ¯āĻž āĻāĻŋāĻ˛ āĻāĻ§āĻž āĻāĻŖā§āĻāĻžāĻ° āĻāĻ˛ā§āĻāĻ¨āĻž āĻ¯āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§āĻĒ āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
- āĻšā§āĻ¯āĻžāĻāĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŽāĻžāĻāĻŋ āĻŦā§āĻļ āĻāĻ°ā§āĻŦāĻ° āĻāĻŋāĻ˛;
- āĻāĻāĻāĻ¨ āĻāĻā§āĻ°āĻŽāĻŖāĻāĻžāĻ°ā§ āĻ¸ā§āĻĒāĻžāĻ° āĻāĻāĻāĻžāĻ° āĻ āĻ§āĻŋāĻāĻžāĻ° āĻ˛āĻžāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§;
- āĻāĻā§āĻ°āĻŽāĻŖāĻāĻŋ (āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻāĻā§ āĻĨāĻžāĻā§) āĻŦāĻŋāĻļā§āĻˇāĻāĻžāĻŦā§ āĻāĻ āĻ¸āĻžāĻāĻā§ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛;
- āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻāĻ˛āĻžāĻāĻž āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻŋ āĻļā§āĻ§ā§ āĻŦā§āĻāĻ¤ā§ āĻšāĻŦā§ āĻā§āĻ¨ āĻ āĻ¨ā§āĻĒā§āĻ°āĻŦā§āĻļ āĻāĻŋāĻ˛ āĻāĻŋāĻ¨āĻž;
- āĻšā§āĻ¯āĻžāĻ āĻ¸āĻžāĻāĻ āĻā§āĻĄ āĻāĻŦāĻ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻĒā§āĻ°āĻāĻžāĻŦāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻž.
āĻļā§āĻˇ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§.
āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻžāĻĻāĻž āĻĢā§āĻ°āĻ¨ā§āĻāĻāĻ¨ā§āĻĄ āĻāĻāĻĒāĻŋ āĻŦāĻŋāĻļā§āĻŦā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĻā§āĻāĻžāĻ¯āĻŧ. āĻŦā§āĻ¯āĻžāĻāĻāĻ¨ā§āĻĄ āĻāĻŦāĻ āĻĢā§āĻ°āĻ¨ā§āĻāĻāĻ¨ā§āĻĄā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ HTTP(āĻā§āĻ˛āĻŋ) āĻāĻžāĻĄāĻŧāĻž āĻā§āĻ¨ā§ āĻŦāĻŋāĻ¨āĻŋāĻŽāĻ¯āĻŧ āĻ¨ā§āĻ, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§/āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻ˛āĻžāĻĻāĻž, āĻā§āĻ¨ā§ āĻā§ āĻŦāĻŋāĻ¨āĻŋāĻŽāĻ¯āĻŧ āĻšāĻ¯āĻŧāĻ¨āĻŋā§ˇ āĻ§ā§āĻ¸āĻ° āĻ āĻŋāĻāĻžāĻ¨āĻžāĻ¯āĻŧ, 80/443 āĻāĻžāĻĄāĻŧāĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°ā§āĻ āĻŦāĻ¨ā§āĻ§āĨ¤ āĻšā§āĻ¯āĻŧāĻžāĻāĻ āĻŦā§āĻ¯āĻžāĻāĻāĻ¨ā§āĻĄ āĻāĻāĻĒāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĻā§āĻāĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻžāĻā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤, āĻ¯āĻžāĻĻā§āĻ° āĻŽāĻŋāĻāĻžāĻāĻ˛ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻāĻžāĻŦā§ āĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ āĻāĻ°ā§āĨ¤
āĻĢā§āĻ°āĻ¨ā§āĻāĻāĻ¨ā§āĻĄā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻĄā§āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ 9 āĻāĻŦāĻ āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĻāĻŋ āĻāĻāĻāĻŋ āĻŦāĻšāĻŋāĻ°āĻžāĻāĻ¤ āĻĢāĻžāĻ¯āĻŧāĻžāĻ°āĻāĻ¯āĻŧāĻžāĻ˛ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻĨāĻŋāĻŦā§ āĻĨā§āĻā§ āĻŦāĻŋāĻā§āĻāĻŋāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧā§ āĻ¯āĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻŦāĻ¨ā§āĻ§ āĻšāĻ¯āĻŧā§ āĻ¯āĻžāĻ¯āĻŧāĨ¤
"āĻ āĻŋāĻ āĻāĻā§, āĻāĻŽāĻžāĻā§ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĻāĻŋāĻ¨," āĻāĻŽāĻŋ āĻāĻ āĻāĻ¨ā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻŽ āĻŦāĻ¨ā§āĻ§ āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤ "āĻāĻŽāĻŋ āĻ¨āĻŋāĻā§āĻ° āĻā§āĻā§ āĻĻā§āĻāĻŦāĨ¤"
āĻāĻāĻžāĻ¨ā§ āĻāĻŦāĻ āĻāĻ°āĻ:
$ grep -F PRETTY_NAME /etc/*releas*
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
$ `echo $SHELL` --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
$ nginx -v
nginx version: nginx/1.10.3
$ gdb --version
GNU gdb (Debian 8.2.1-2) 8.2.1
āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻšā§āĻ¯āĻžāĻ āĻā§āĻāĻāĻā§āĻ¨
āĻāĻŽāĻŋ āĻĒā§āĻ°āĻĨāĻŽā§ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻļā§āĻ°ā§ āĻāĻ°āĻŋ āĻāĻĻā§āĻ§āĻžāĻ°-āĻŽā§āĻĄ. āĻāĻŽāĻŋ āĻĄāĻŋāĻ¸ā§āĻ āĻŽāĻžāĻāĻ¨ā§āĻ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻ˛ā§āĻāĻžāĻ¨ā§ āĻĒā§āĻ°āĻŽāĻžāĻŖ-āĻ˛āĻ, āĻāĻ¤āĻŋāĻšāĻžāĻ¸, āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ˛āĻ, āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ, āĻ¯āĻĻāĻŋ āĻ¸āĻŽā§āĻāĻŦ āĻšāĻ¯āĻŧ, āĻāĻŽāĻŋ āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋāĻ° āĻ¤āĻžāĻ°āĻŋāĻāĻā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŋ, āĻ¯āĻĻāĻŋāĻ āĻāĻŽāĻŋ āĻŦā§āĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻā§āĻ°ā§āĻ¯āĻžāĻāĻžāĻ° āĻ¨āĻŋāĻā§āĻ° āĻĒāĻ°ā§ "āĻāĻ ā§ āĻāĻ āĻ¤" āĻāĻŦāĻ āĻŽāĻŋāĻļāĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻ¨āĻŋāĻā§āĻā§ āĻā§āĻāĻāĻ¤ā§ āĻāĻŋāĻ¯āĻŧā§ āĻ āĻ¨ā§āĻ "āĻĒāĻžāĻ¯āĻŧā§ āĻĒāĻĄāĻŧā§" .
āĻāĻŽāĻŋ āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻŽā§āĻĄā§ āĻļā§āĻ°ā§ āĻāĻ°āĻŋ, āĻāĻāĻ¨āĻ āĻŦā§āĻāĻ¤ā§ āĻĒāĻžāĻ°āĻāĻŋ āĻ¨āĻž āĻā§ āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻāĻŽāĻŋ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°āĻā§āĻ˛āĻŋ āĻ
āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻāĻ°āĻŋāĨ¤ āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻŽāĻŋ āĻāĻā§āĻ°āĻšā§ nginx āĻ¯ā§āĻšā§āĻ¤ā§, āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§, āĻāĻāĻŋ āĻāĻžāĻĄāĻŧāĻž āĻĢā§āĻ°āĻ¨ā§āĻāĻāĻ¨ā§āĻĄā§ āĻāĻ° āĻāĻŋāĻā§āĻ āĻ¨ā§āĻāĨ¤
āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°āĻā§āĻ˛āĻŋ āĻā§āĻ, āĻāĻ āĻĄāĻāĻ¨ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸ā§āĻāĻ āĻŋāĻ¤, āĻāĻŽāĻŋ āĻā§āĻŦāĻ˛ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻĻā§āĻā§āĻāĻŋ āĻŦāĻŋāĻĄāĻŧāĻžāĻ˛āĻāĻš āĻāĻ āĻāĻ āĻāĻ°ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻšāĻā§āĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻ¨āĻ āĻāĻžāĻ¨ā§āĻ¨ āĻ¨āĻž āĻ¯ā§ āĻāĻŽāĻŋ āĻāĻŋāĻā§ āĻŽāĻŋāĻ¸ āĻāĻ°ā§āĻāĻŋ āĻāĻŋāĻ¨āĻž āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž, āĻāĻŽāĻžāĻā§ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĻāĻŋāĻ¨:
$ nginx -T
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
āĻāĻŽāĻŋ āĻŦā§āĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĻ¨āĻŋ: "āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻāĻŋ āĻā§āĻĨāĻžāĻ¯āĻŧ?"
$ nginx -V
nginx version: nginx/1.10.3
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module
āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻ° āĻĒā§āĻ°āĻļā§āĻ¨ā§ āĻāĻāĻāĻŋ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻĒā§āĻ°āĻļā§āĻ¨ āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§: "āĻā§āĻ¨ āĻāĻ¨āĻāĻŋāĻ¨ā§āĻā§āĻ¸ā§āĻ° āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ?"
āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ āĻāĻ°ā§ āĻ¯ā§ āĻ¸āĻ°ā§āĻŦāĻļā§āĻˇ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§:
$ dpkg -l nginx | grep "[n]ginx"
ii nginx 1.14.2-2+deb10u1 all small, powerful, scalable web/proxy server
āĻāĻŽāĻŋ āĻĢā§āĻ¨ āĻĻāĻŋāĻā§āĻāĻŋ:
- āĻŽāĻŋāĻļāĻž, āĻ¤ā§āĻŽāĻŋ āĻāĻŦāĻžāĻ° āĻāĻĄāĻŧā§ āĻšāĻ˛ā§ āĻā§āĻ¨? nginx?
- āĻĻāĻžāĻāĻĄāĻŧāĻžāĻ, āĻāĻŽāĻŋ āĻāĻāĻž āĻāĻŋāĻāĻžāĻŦā§ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨āĻŋ āĻ¨āĻž!
-āĻāĻā§āĻāĻž āĻā§āĻŽāĻžāĻ...
nginx āĻāĻāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ°āĻāĻžāĻŦā§ āĻĒā§āĻ¨āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ "-T" āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻ° āĻāĻāĻāĻĒā§āĻ āĻāĻāĻāĻŋ āĻāĻžāĻ°āĻŖā§ āĻ˛ā§āĻāĻžāĻ¨ā§ āĻāĻā§āĨ¤ āĻšā§āĻ¯āĻžāĻāĻŋāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ° āĻā§āĻ¨ āĻ¸āĻ¨ā§āĻĻā§āĻš āĻ¨ā§āĻ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋāĻā§ āĻ¸āĻšāĻāĻāĻžāĻŦā§ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ (āĻ¯ā§āĻšā§āĻ¤ā§ āĻŽāĻŋāĻļāĻž āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°āĻāĻŋ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĻāĻŋāĻ¯āĻŧā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻā§āĻ¨) āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻāĻŋ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§āĻ¨āĨ¤
āĻāĻŦāĻ āĻĒā§āĻ°āĻā§āĻ¤āĻĒāĻā§āĻˇā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻā§āĻ āĻ āĻ§āĻŋāĻāĻžāĻ° āĻĒā§āĻ¯āĻŧā§āĻā§ āĻļāĻŋāĻāĻĄāĻŧ'āĻāĻš, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻāĻž āĻāĻ°āĻžāĻ āĻŦā§āĻ§āĻāĻŽā§āĻ¯ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž, āĻāĻŦāĻ āĻ¸ā§āĻāĻžāĻ¨ā§ āĻā§ āĻā§āĻ˛ āĻāĻŋāĻ˛ āĻ¤āĻž āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻ āĻā§āĻā§ āĻāĻŋāĻ˛, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻŦāĻžāĻ° āĻā§āĻ¤ā§āĻšāĻ˛ āĻā§āĻŽāĻā§ āĻĒāĻ°āĻžāĻāĻŋāĻ¤ āĻāĻ°ā§āĻāĻŋāĻ˛āĨ¤ āĻ¤āĻžāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻ āĻĨā§āĻā§ āĻā§ āĻ˛ā§āĻāĻžāĻ¤ā§ āĻā§āĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻ¤āĻž āĻāĻŽāĻ°āĻž āĻā§āĻāĻžāĻŦā§ āĻā§āĻāĻā§ āĻĒāĻžāĻŦ?
āĻāĻ¸ā§āĻ¨ āĻā§āĻ°ā§āĻ¸ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ:
$ strace nginx -T
āĻāĻŽāĻ°āĻž āĻāĻāĻŋāĻ° āĻĻāĻŋāĻā§ āĻ¤āĻžāĻāĻžāĻ, āĻāĻāĻāĻŋ āĻ˛āĻž āĻā§āĻ°ā§āĻ¸ā§ āĻ¸ā§āĻĒāĻˇā§āĻāĻ¤āĻ āĻ¯āĻĨā§āĻˇā§āĻ āĻ˛āĻžāĻāĻ¨ āĻ¨ā§āĻ
write(1, "/etc/nginx/nginx.conf", 21/etc/nginx/nginx.conf) = 21
write(1, "...
write(1, "n", 1
āĻļā§āĻ§ā§ āĻŽāĻāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻ¸ā§āĻ¨ āĻĢāĻ˛āĻžāĻĢāĻ˛āĻā§āĻ˛āĻŋ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻŋāĨ¤
$ strace nginx -T 2>&1 | wc -l
264
$ strace nginx -t 2>&1 | wc -l
264
āĻāĻŽāĻŋ āĻŽāĻ¨ā§ āĻāĻ°āĻŋ āĻā§āĻĄ āĻ āĻāĻļ /src/core/nginx.c
case 't':
ngx_test_config = 1;
break;
case 'T':
ngx_test_config = 1;
ngx_dump_config = 1;
break;
āĻĢāĻ°ā§āĻŽā§ āĻāĻ¨āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛:
case 't':
ngx_test_config = 1;
break;
case 'T':
ngx_test_config = 1;
//ngx_dump_config = 1;
break;
āĻŦāĻž
case 't':
ngx_test_config = 1;
break;
case 'T':
ngx_test_config = 1;
ngx_dump_config = 0;
break;
āĻ¤āĻžāĻ "-T" āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ?
āĻ¯āĻĻāĻŋ āĻāĻŽāĻžāĻ° āĻāĻŋāĻ¨ā§āĻ¤āĻž āĻ¸āĻ āĻŋāĻ āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ ngx_dump_config āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ āĻāĻŋāĻĄāĻŋāĻŦāĻŋ, āĻāĻžāĻā§āĻ¯āĻā§āĻ°āĻŽā§ āĻāĻāĻāĻŋ āĻāĻžāĻŦāĻŋ āĻāĻā§ --with-cc-opt -g āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻāĻŦāĻ āĻ¯ā§ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻžāĻ¨ āĻāĻļāĻž āĻāĻ°āĻŋ -āĻ2 āĻāĻāĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇāĻ¤āĻŋ āĻāĻ°āĻŦā§ āĻ¨āĻžāĨ¤ āĻāĻāĻ āĻ¸āĻŽāĻ¯āĻŧā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻŋ āĻāĻžāĻ¨āĻŋ āĻ¨āĻž āĻāĻŋāĻāĻžāĻŦā§ ngx_dump_config āĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻā§āĻ¸ 'āĻāĻŋ':, āĻāĻŽāĻ°āĻž āĻāĻ āĻŦā§āĻ˛āĻāĻāĻŋāĻā§ āĻāĻ˛ āĻāĻ°āĻŦ āĻ¨āĻž, āĻ¤āĻŦā§ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻŦ āĻā§āĻ¸ 'āĻāĻŋ':
āĻā§āĻ¨ āĻāĻĒāĻ¨āĻŋ '-t' āĻāĻ° āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ '-T' āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĻŦā§āĻ˛āĻ āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻŋāĻ āĻ¯āĻĻāĻŋ (ngx_dump_config) āĻāĻŋāĻ¤āĻ°ā§ āĻāĻā§ āĻ¯āĻĻāĻŋ (ngx_test_config):
if (ngx_test_config) {
if (!ngx_quiet_mode) {
ngx_log_stderr(0, "configuration file %s test is successful",
cycle->conf_file.data);
}
if (ngx_dump_config) {
cd = cycle->config_dump.elts;
for (i = 0; i < cycle->config_dump.nelts; i++) {
ngx_write_stdout("# configuration file ");
(void) ngx_write_fd(ngx_stdout, cd[i].name.data,
cd[i].name.len);
ngx_write_stdout(":" NGX_LINEFEED);
b = cd[i].buffer;
(void) ngx_write_fd(ngx_stdout, b->pos, b->last - b->pos);
ngx_write_stdout(NGX_LINEFEED);
}
}
return 0;
}
āĻ āĻŦāĻļā§āĻ¯āĻ, āĻ¯āĻĻāĻŋ āĻāĻ āĻ āĻāĻļā§ āĻā§āĻĄ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻ¨āĻž āĻšāĻ¯āĻŧ āĻā§āĻ¸ 'āĻāĻŋ':, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻžāĻ āĻāĻ°āĻŦā§ āĻ¨āĻžāĨ¤
nginx.conf āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻŽā§āĻ˛āĻāĻāĻžāĻŦā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻˇā§āĻ āĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻ¯ā§ āĻŽā§āĻ¯āĻžāĻ˛āĻāĻ¯āĻŧā§āĻ¯āĻžāĻ°āĻāĻŋ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¨ā§āĻ¯ā§āĻ¨āĻ¤āĻŽ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ nginx āĻĒā§āĻ°āĻāĻžāĻ°:
events {
}
http {
include /etc/nginx/sites-enabled/*;
}
āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤āĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦāĨ¤
āĻĄāĻŋāĻŦāĻžāĻāĻžāĻ° āĻāĻžāĻ˛ā§ āĻāĻ°ā§āĻ¨
$ gdb --silent --args nginx -t
Reading symbols from nginx...done.
(gdb) break main
Breakpoint 1 at 0x1f390: file src/core/nginx.c, line 188.
(gdb) run
Starting program: nginx -t
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Breakpoint 1, main (argc=2, argv=0x7fffffffebc8) at src/core/nginx.c:188
188 src/core/nginx.c: No such file or directory.
(gdb) print ngx_dump_config=1
$1 = 1
(gdb) continue
Continuing.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/nginx.conf:
events {
}
http {
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}
map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}
map Đž:$sign_user_agent:$sign_uri $sign_o
{
Đž:1:0 o;
default Đž;
}
map Đ°:$sign_user_agent:$sign_uri $sign_a
{
Đ°:1:0 a;
default Đ°;
}
sub_filter_once off;
sub_filter 'Đž' $sign_o;
sub_filter 'Đ°' $sign_a;
include /etc/nginx/sites-enabled/*;
}
# configuration file /etc/nginx/sites-enabled/default:
[Inferior 1 (process 32581) exited normally]
(gdb) quit
āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻā§āĻ˛āĻŋ:
- āĻĢāĻžāĻāĻļāĻ¨ā§ āĻāĻāĻāĻŋ āĻŦā§āĻ°ā§āĻāĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻ āĻāĻ°ā§āĻ¨ āĻĒā§āĻ°āĻ§āĻžāĻ¨ ()
- āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻžāĻ˛āĻžāĻ¨
- āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻŽāĻžāĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°ā§āĻ¨ āĻ¯āĻž āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻ° āĻāĻāĻāĻĒā§āĻ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§ ngx_dump_config=1
- āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻžāĻ˛āĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻ¨/āĻļā§āĻˇ āĻāĻ°ā§āĻ¨
āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻā§āĻāĻŋ, āĻāĻ¸āĻ˛ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻĨā§āĻā§ āĻāĻ˛āĻžāĻĻāĻž, āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻĒāĻ°āĻā§āĻŦā§ āĻ āĻāĻļ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻŋ:
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}
map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}
map Đž:$sign_user_agent:$sign_uri $sign_o
{
Đž:1:0 o;
default Đž;
}
map Đ°:$sign_user_agent:$sign_uri $sign_a
{
Đ°:1:0 a;
default Đ°;
}
sub_filter_once off;
sub_filter 'Đž' $sign_o;
sub_filter 'Đ°' $sign_a;
āĻāĻ° āĻā§āĻ°āĻŽāĻžāĻ¨ā§āĻ¸āĻžāĻ°ā§ āĻāĻāĻžāĻ¨ā§ āĻāĻŋ āĻāĻāĻā§ āĻ¤āĻž āĻāĻāĻŦāĻžāĻ° āĻĻā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ.
āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻĻā§āĻ¤āĻāĻ° yandex/google:
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}
āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻĒā§āĻˇā§āĻ āĻžāĻā§āĻ˛āĻŋ āĻŦāĻžāĻĻ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄāĻĒā§āĻ°ā§āĻ¸:
map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}
āĻāĻŦāĻ āĻ¯āĻžāĻ°āĻž āĻāĻĒāĻ°ā§āĻ° āĻāĻāĻ¯āĻŧ āĻļāĻ°ā§āĻ¤ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻĄāĻŧā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯
map Đž:$sign_user_agent:$sign_uri $sign_o
{
Đž:1:0 o;
default Đž;
}
map Đ°:$sign_user_agent:$sign_uri $sign_a
{
Đ°:1:0 a;
default Đ°;
}
āĻ˛ā§āĻāĻžāĻ° āĻāĻŋāĻ¤āĻ° āĻāĻāĻāĻāĻŋāĻāĻŽāĻāĻ˛- āĻĒā§āĻˇā§āĻ āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ 'āĻ' āĻāĻĒāĻ° 'āĻ' и 'āĻ' āĻāĻĒāĻ° 'āĻ':
sub_filter_once off;
sub_filter 'Đž' $sign_o;
sub_filter 'Đ°' $sign_a;
āĻāĻāĻž āĻ āĻŋāĻ, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸ā§āĻā§āĻˇā§āĻŽāĻ¤āĻž āĻ¯ā§ 'a'!= 'a' āĻ āĻŋāĻ āĻ¯ā§āĻŽāĻ¨ 'āĻ'!= 'āĻ':
āĻāĻāĻāĻžāĻŦā§, āĻ¸āĻžāĻ°ā§āĻ āĻāĻā§āĻāĻŋāĻ¨ āĻŦāĻāĻā§āĻ˛āĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ 100% āĻ¸āĻŋāĻ°āĻŋāĻ˛āĻŋāĻ āĻĒāĻžāĻ ā§āĻ¯ā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§, āĻ˛ā§āĻ¯āĻžāĻāĻŋāĻ¨ āĻĻāĻŋāĻ¯āĻŧā§ āĻŽāĻŋāĻļā§āĻ°āĻŋāĻ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻāĻŦāĻ°ā§āĻāĻ¨āĻž āĻĒāĻžāĻ¯āĻŧ 'āĻ' и 'āĻ'. āĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻ¸āĻāĻāĻā§ āĻĒā§āĻ°āĻāĻžāĻŦāĻŋāĻ¤ āĻāĻ°ā§ āĻ¤āĻž āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻŽāĻŋ āĻāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻ¸āĻžāĻšāĻ¸ āĻāĻ°āĻŋ āĻ¨āĻž, āĻ¤āĻŦā§ āĻāĻāĻŋ āĻ
āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻ¯ā§ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ
āĻā§āĻˇāĻ°āĻā§āĻ˛āĻŋ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻ
āĻŦāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻ¤āĻŋāĻŦāĻžāĻāĻ āĻĒā§āĻ°āĻāĻžāĻŦ āĻĢā§āĻ˛āĻŦā§āĨ¤
āĻāĻŽāĻŋ āĻāĻŋ āĻŦāĻ˛āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ, āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻ¸āĻā§āĻā§ āĻŦāĻ˛āĻāĻŋ.
āĻ°ā§āĻĢāĻžāĻ°ā§āĻ¨ā§āĻ¸
āĻāĻ¤ā§āĻ¸: www.habr.com