2015-05-05 5 views
0

Я использую Nginx для проекта PHP. Вот то, что я делаю в /etc/nginx/sites-available/default:Nginx несколько доменных директив

server { 

server_name domain_a.com; 
include /etc/nginx/main.conf; // listen, php directives, etc. 

location ~ (.*)\.php(/|$) { 
    fastcgi_pass php:9000; 
    fastcgi_split_path_info ^(.+\.php)(/.*)$; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param HTTPS off; 
    } 
} 

server { 

server_name domain_b.com; 
include /etc/nginx/main.conf; 

location ~ (.*)\.php(/|$) { 
    fastcgi_pass php:9000; 
    fastcgi_split_path_info ^(.+\.php)(/.*)$; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param HTTPS off; 

    // Specific to this domain 
    auth_basic "Authentication"; 
    auth_basic_user_file /etc/nginx/.htpasswd; 
    } 
} 

/etc/nginx/main.conf

listen 80; 
client_max_body_size 5M; 

access_log /var/log/nginx/access.log; 
error_log /var/log/nginx/error.log; 

root /var/www/web; 

У меня есть много повторения в этом коде: Два location блок можно объединить в один для двух доменов. Я думаю, что я мог бы использовать оператор if для добавления моего специального кода для domain_b, но он не является рекомендуемым способом в соответствии с документацией. http://wiki.nginx.org/IfIsEvil

У вас есть идея, как я могу сделать, чтобы уважать концепцию DRY?

Thx,

ответ

1

Для меня создать папку в моем конф и назовите его includes, например, а затем вы можете включить это где вы хотите, например

# /etc/nginx/includes/php.conf 
location ~ (.*)\.php(/|$) { 
    fastcgi_pass php:9000; 
    fastcgi_split_path_info ^(.+\.php)(/.*)$; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param HTTPS off; 
} 

Затем в конфигурации делают что-то вроде этого

server { 
    server_name domain_a.com; 
    include /etc/nginx/main.conf; // listen, php directives, etc. 
    include /etc/nginx/includes/php.conf; 
} 

server { 
    server_name domain_b.com; 
    include /etc/nginx/main.conf; 
    include /etc/nginx/includes/php.conf; 
    auth_basic "Authentication"; 
    auth_basic_user_file /etc/nginx/.htpasswd; 
    } 
} 
+0

Спасибо, я был заблокирован, потому что я пытаюсь включить auth_basic инструкции в месте, но это не имеет смысла, что –

+0

вы имеете в виду, заблокированные? –

+0

Я имею в виду, что я застрял на проблеме –

Смежные вопросы