location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if (-f $request_filename) {
access_log off;
expires 30d;
break;
}
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:8080; # backend server listening
break;
}
}
Di atas akan melayani semua file yang ada secara langsung menggunakan Nginx (misalnya Nginx hanya menampilkan kode sumber PHP), jika tidak, teruskan permintaan ke Apache. Saya perlu mengecualikan file * .php dari aturan sehingga permintaan * .php juga diteruskan ke Apache dan diproses.
Saya ingin Nginx menangani semua file statis dan Apache untuk memproses semua hal dinamis.
EDIT: Ada pendekatan daftar putih, tetapi tidak terlalu elegan, Lihat semua ekstensi itu, saya tidak menginginkan ini.
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
access_log off;
expires 30d;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
EDIT 2: Pada versi yang lebih baru dari penggunaan Nginx try_files
bukan http://wiki.nginx.org/HttpCoreModule#try_files
nginx
reverse-proxy
static-files
fmalina.dll
sumber
sumber
Jawaban:
Gunakan try_files dan beri nama blok lokasi ('@apachesite'). Ini akan menghapus kecocokan regex yang tidak perlu dan jika diblokir. Lebih efisien.
Pembaruan: Asumsi dari konfigurasi ini adalah bahwa tidak ada skrip php di bawah
/path/to/root/of/static/files
. Ini umum terjadi di sebagian besar kerangka kerja php modern. Jika proyek php lawas Anda memiliki skrip php dan file statis yang tercampur dalam folder yang sama, Anda mungkin harus memasukkan semua jenis file yang Anda inginkan ke nginx ke daftar putih.sumber
$uri/
maka itu berhasil.root /path/to/root/of/*static*/files;
. File php harus diletakkan di folder yang berbeda, tidak langsung dapat diakses dari internet.Coba ini:
Semoga berhasil. Ekspresi reguler memiliki prioritas lebih tinggi daripada string biasa, jadi semua permintaan yang diakhiri dengan
.php
harus diganti ke Apache jika hanya.php
ada file yang sesuai . Sisanya akan ditangani sebagai file statis. Algoritme sebenarnya untuk mengevaluasi lokasi ada di sini .sumber
Jika Anda menggunakan mod_rewrite untuk menyembunyikan ekstensi skrip Anda, atau jika Anda hanya menyukai URL cantik yang diakhiri dengan /, Anda mungkin ingin mendekatinya dari arah lain. Beri tahu nginx untuk membiarkan apa pun dengan ekstensi non-statis masuk ke apache. Sebagai contoh:
Saya menemukan bagian pertama dari cuplikan ini di: http://code.google.com/p/scalr/wiki/NginxStatic
sumber