UWSGI (Django 2.0) uygulamamız çalışırken, NGINX’i ona giden trafiği proxy olarak ayarlamaya hazırız.
Kaynaklar
Uwsgi_pass kullanma
Uwsgi’nin “WSGI” kısmı, “Web Server Gateway Interface – Web Sunucusu Ağ Geçidi Arayüzü” anlamına gelir ve başlangıçta Python’a özgü bir protokoldür. Uwsgi’deki “u”, “Universal” anlamına gelir. FastCGI gibi, uWSGI bir programdan diğerine bilgi aktarmanın başka bir yoludur. Ayrıca FastCGI gibi, NGINX de trafiği doğrudan http_uwsgi_module kullanarak çalışan bir uWSGI uygulamasına proxy yapmak için bir modül sağlar. Şimdi bu modülü kullanarak basit bir yapılandırma oluşturalım:
/etc/nginx/conf.d/notes.example.com.conf
server { listen 80; server_name notes.example.com; location /static { root /var/www/notes.example.com; } location / { include uwsgi_params; uwsgi_pass unix:/var/run/uwsgi/notes.sock; } }
Bu noktalar tanıdık gelmelidir. NGINX’in yaratıcıları, NGINX tarafından sağlanan proxy yöntemlerinin hepsinin çok benzer şekillerde çalışmasını sağlamak için harika bir iş çıkardıkları gözüküyor. Statik değerler /var/www içindeki bir dizinden sunuyoruz, böylece Python işleminin bunlar için endişelenmesine gerek kalmaz. Statik bir varlık için olmayan tüm trafik, uwsgi_pass kullanılarak uygulamamıza proxy olarak bağlanıyor
FastCGI’de fastcgi_params dosyası ve uWSGI’da uwsgi_params dosyası bulunur (her ikisi de varsayılan olarak NGINX tarafından sağlanır). Uwsgi_params dosyası şunları içerir:
/etc/nginx/uwsgi_params
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REQUEST_SCHEME $scheme; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;
Bu dosya NGINX değişkenlerini uWSGI’nin beklediği dizge gösterimiyle eşleştirir.
Bu yapılandırma çalışmadan önce SELinux’a NGINX’in soket ile iletişim kurmasına izin vermesini söylememiz gerekecek. Şimdi, SELinux’u izin verici olarak ayarlayarak, bir talepte bulunarak ve ardından denetim günlüğünden bir politika dosyası oluşturarak gördüğümüz sorunlara dayalı bir politika dosyası oluşturacağımız noktaya geldik.
[root] $ cd /etc/nginx [root] $ semanage permissive -a httpd_t [root] $ systemctl reload nginx [root] $ curl --header "Host: notes.example.com" localhost ... [root] $ grep nginx /var/log/audit/audit.log | audit2allow -m nginx module nginx 1.0; require { type httpd_t; type initrc_t; class unix_stream_socket connectto; } #============= httpd_t ============== #!!!! The file '/run/uwsgi/notes.sock' is mislabeled on your system. #!!!! Fix with $ restorecon -R -v /run/uwsgi/notes.sock allow httpd_t initrc_t:unix_stream_socket connectto; [root] $ grep nginx /var/log/audit/audit.log | audit2allow -M nginx **** IMPORTANT *** To make this policy package active, execute: semodule -i nginx.pp
Bu modül, nginx için kurallara bağlı kalacaktır ve gerekirse bu konuda daha sonra değişiklikler yapabiliriz. NGINX’teki izin verilebilirliği kaldırma, modülü yükleme ve etkinleştirme sürecini bitirelim.
[root] $ semanage permissive -d httpd_t [root] $ semodule -i nginx.pp libsemanage.semanage_direct_install_info: nginx module will be disabled after install due to default enabled status. [root] $ semodule -e nginx [root] $ restorecon -Rv /var/run/uwsgi/ restorecon reset /run/uwsgi/notes.sock context system_u:object_r:var_run_t:s0->system_u:object_r:httpd_var_run_t:s0
Şimdi, web tarayıcınızdan notes.example.com adresini ziyaret ettiğimizde (/etc/hosts dosyamızda gerekli tanımlamayı yaptıgımızı düşünerek), Markdown not alma uygulamamız için bir giriş sayfası göreceğiz.