NGINX – Fastcgi_pass ile PHP/WordPress için FastCGI Proxy Kullanımı

NGINX’i WordPress için reverse proxy olarak ayarlama zamanı.

Fastcgi_pass Konfigurasyonu

FastCGI, bir web sunucusundan harici programlara bilgi paylaşmak için “ikili protokol” dür. CGI kısmı, “Common Gateway Interface (Ortak Ağ Geçidi Arayüzü)” anlamına gelir ve ek yükün bir kısmını sınırlayan ve daha performanslı olan FastCGI’nin öncülüydü. Protokolün kendisini anlamak bu yazının kapsamı dışındadır, ancak bu protokol php-fpm kullanarak NGINX’ten PHP’ye bilgi aktarmamıza izin verecektir. NGINX, bir bağlantı noktasında genel bir uygulamaya proxy yapmak için kullandığımız http_proxy_module ile çok benzer şekilde çalışan FastCGI ile çalışmak için http_fastcgi_module modülünü sağlar.

Bir soket üzerinde dinleyen WordPress sitemize giden trafiği proxy yapmak için basit bir FastCGI yapılandırması oluşturalım:

/etc/nginx/conf.d/test.example.com.conf

server {
    listen 80;
    server_name test.example.com;

root /var/www/test.example.com;
index index.php;

location / {
    try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
    fastcgi_index index.php;
    fastcgi_pass unix:/var/run/php-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

}

Bir index.html’yi sunmak istemiyoruz, bu nedenle, index.php dosyalarını yalnızca istek URI’sı bir / ile bitiyorsa oluşturmamız gerektiğini belirtmek için index yönergesini kullanıyoruz. İlk kod bloğumuz, WordPress ile çalışmaya özgüdür ve default olarak /index.php? ya erişmeye çalışır, sorgu parametlerelerimizde $uri yi bulamazsa diye eklenmiştir.

Fastcgi_pass direktifi proxy_pass direktifi gibi çalışır ve trafiğe proxy yaptığımız hedefi nasıl belirlediğimizdir. Dahili iletişim için ağ yığınını kullanmanın ek yükünden kaçınmak için bağlantı noktası yerine soket kullanıyoruz. FastCGI, sahip olduğumuz NGINX değişkenleri kullanılarak tanımlanabilen çok sayıda değişkene (veya parametrelere) sahiptir. Neyse ki, NGINX, /etc/nginx/fastcgi_params’dan dahil edebileceğimiz bu değerlerin çoğu için mantıklı varsayılanlara sahip bir dosya sağlar. İşte bu dosya neye benziyor:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;


fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;


fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;


PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param  REDIRECT_STATUS    200;

Özellikle WordPress için, SCRIPT_FILENAME dosyasını biraz değiştirmemiz gerekiyor, böylece yapılandırmayı ekledikten sonra bunu yapacağız:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Şimdi, web tarayıcımızdan test.example.com’u ziyaret ettiğimizde, kurulum sihirbazı tarafından siteyi ve yönetici kullanıcıyı oluşturmamız istenecek. Bununla birlikte, WordPress’i NGINX’in arkasına başarıyla yerleştirdik.

Bi sonraki yazılarımızda görüşmek üzere, nginx üzerinde php uygulamamız olan wordpress kurulumunu gerçekleştirmiş olduk,

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir