hal pertama yang selalu saya jumpai pada saat pertama kali memasang web server Nginx adalah menemui masalah nginx tidak dapat mengakses root directory dari blok server yang telah saya konfigurasi. dan Biasanya terjadi jika saya meletakan web root saya di luar dari direktori /var/www/public.

Pastikan Kepemilikan Direktori Sama Dengan Nginx

Untuk mendapaktkan akses yang sudah di terapkan oleh suatu direktori, Aplikasi tersebut harus di jalankan oleh user yang sama atau memiliki hak istimewa (privilege) di atas atau sama dengan user tersebut.

Secara umum jika di jalankan sebagai services, Nginx akan dijalankan oleh nama user nginx sebagai mana yang di deskripsikan pada berkas konfigurasi di /etc/nginx/nginx.conf. Jika nama user yang menjalankan Nginx tidak sama dengan pemilik direktori, atau tidak memiliki hak akses istimewat terhadap direktori tersebut secara otomatis Nginx akan melemparkan respon 403 dimana dia tidak dapat mengakses berkas yang diminta.

Untuk Menyelsaikan hal ini anda dapat memilih antara mengganti nama user yang menjalankan Nginx atau Mengganti hak kepemilikan berkas tersebut kepada nama user nginx.

Metode 1: Mengganti Pengguna Nginx

Untuk mengganti nama user yang menjalankan Nginx terlebih dahulu anda perlu mengetahui user mana yang memiliki kepemilikan terhadap berkas tersebut. Asumsikan anda meletakan direktori root anda di home folder user anda dengan nama direktori situs, atau lebih jelasnya ~/situs, maka anda bisa mencek dengan menjalankan perintah:

$ namei -l ~/situs

Pada baris paling akhir anda bisa melihat nama user yang meiliki direktori tersebut. Pada contoh kasus yang saya miliki maka pemilik direktori tersebut adalah user dengan nama VikTymZ seperti yang ada pada gambar berikut:

Setelah mengetahui nama user yang memiliki akses penuh terhadap direktori tersebut maka langkah selanjutnya adalah menyesuaikan nama user yang nantinya akan menjalankan Nginx, untuk melakukan hal ini anda dapat membuka berkas /etc/nginx/nginx.conf dan dapat merubah nilai dari variabel user, Pada kasus ini saya akan merubah nilai user dari nginx menjadi VikTymZ:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user VikTymZ; # Ubah dari nginx menjadi nama user anda
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

/***/

Selanjutnya anda bisa coba jalankan kembali nginx server anda dan coba muat kembali halaman tersebut.

Metode 2: Mengganti Kepemilikan Direktori

selain cara sebelumnya anda juga dapat melakukan hal sebaliknya, yaitu mengganti kepemilikan Direktori tersebut dengan nama user nginx, Asumsikan kita menggunakan direktori yang sama dengan yang sebelumnya, yaitu di ~/situs maka anda dapat menjalankan perintah berikut:

$ sudo chown nginx:nginx -R ~/situs

Perintah di atas dimaksudkan untuk merubah kepemilikan dari yang sebelumnya dimiliki oleh VikTymZ menjadi nginx beserta user group-nya secara recrusive (turut merubah kepemilikan untuk berkas didalam direktori tersebut) Setelah perubahan berhasil, maka anda dapat memuat ulang halaman tersebut.

Oops! Masih mendapatkan pesan 403?

Walau telah melakukan hal di atas terkadang nginx masih tidak dapat mengakses direktori yang diminta. Biasanya ini berkaitan dengan status Enforcing pada SELinux Anda. Jika SELinux terpasang di sistem anda, anda dapat mengecek status SELinux yang sedang berjalan dengan perintah berikut:

$ getenforce

Jika anda mendapatkan output Enforcing, anda dapat coba merubah status SELinux tersebut menjadi Permissive

$ sudo setenforce Permissive

jika sudah bisa dicoba kembali untuk memuat ulang halaman tersebut. Untuk membuat opsi ini permanen, anda dapat merubah status SELinux pada sistem anda melalui berkas /etc/sysconfig/selinux.

Namun jika anda tidak ingin merubah Status SELinux anda menjadi Permissive, anda dapat mecoba merubah Security Context SELinux di direktori situs anda tersebut menjadi httpd_sys_content, Rubah ~/situs dengan path menuju direktori situs anda dan Jalankan perintah berikut:

$ sudo chcon -Rt httpd_sys_content_t ~/situs