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,