nginx 서버 블록에 해당하는 2차 도메인 이름에 대해

nginx 서버 블록에 해당하는 2차 도메인 이름에 대해

2개의 2차 도메인 이름이 있고 다음과 같은 2개의 해당 폴더가 있습니다.

domain name    folder
111.aa.com     /var/www/111.aa.com
222.aa.com     /var/www/222.aa.com

에는 nginx.conf아래와 같이 2개의 서버 블록이 있습니다.

#111.aa.com

server {
    listen       80;
    server_name  111.aa.com;

    charset utf-8;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /var/www/111.aa.com;
        index  index.php index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}


    location ~ \.php$ {
        root           /var/www/111.aa.com;
        fastcgi_pass   unix:/dev/shm/php-fpm.sock;
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  QUERY_STRING     $query_string;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

#222.aa.com

server {
    listen       80;
    server_name  222.aa.com;

    charset utf-8;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /var/www/222.aa.com;
        index  index.php index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}


    location ~ \.php$ {
        root           /var/www/222.aa.com;
        fastcgi_pass   unix:/dev/shm/php-fpm.sock;
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  QUERY_STRING     $query_string;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

질문:

  1. 두 개의 서버 블록이 필요합니까? 2차 도메인 이름이 100개가 있고 서버 블록을 100개 쓰고 싶은 경우 서버 블록 1개에 쓸 수 있나요? 서버 블록에 쓰는 방법은 무엇입니까? 어떤 예가 있습니까?

  2. 1개의 서버 블록을 쓰는 것과 각각 100개의 서버 블록을 쓰는 것 중 어느 것이 더 낫습니까?

답변1

다음과 같은 작업을 수행할 수 있습니다.

server {
  server_name *.aa.com;
  root /var/www/$http_host;
  location / {
    try_files $uri $uri/ 404=@redirect;
  }

  location @redirect {
    return 301 http://aa.com;
  }
}

도메인 이름에는 ".." 또는 "/"가 포함될 수 없기 때문에 Nginx는 잘못된 도메인 이름을 거부함으로써 잘못된 루트 위치를 설정하는 데 사용할 수 있는 잘못된 도메인 이름으로부터 사용자를 보호하므로 보안은 여기서 아무 것도 아닙니다. 큰 문제입니다.

관련 정보