Pengenalan kepada nginx:
nginx ("enjin x") ialah pelayan proksi http dan songsang berprestasi tinggi, serta proksi imap/pop3/smtp pelayan. nginx telah dibangunkan oleh igor sysoev untuk tapak rambler.ru kedua paling banyak dilawati di Rusia, di mana ia telah berjalan selama lebih empat tahun. igor mengeluarkan kod sumber di bawah lesen seperti BSD. Dalam empat tahun sejak dikeluarkan, nginx telah terkenal dengan kestabilannya, set ciri yang kaya, fail konfigurasi sampel dan penggunaan sumber sistem yang rendah. Pada masa ini, nginx telah digunakan pada laman web portal domestik utama, seperti Sina, NetEase, Tencent, dan lain-lain. Baru-baru ini telah ditemui bahawa teknologi nginx semakin popular di China, dan semakin banyak tapak web mula menggunakan nginx. Ini semua disebut dalam talian.
pemasangan nginx
nginx ialah pelayan web ringan/pelayan proksi terbalik dan pelayan proksi e-mel (imap/pop3), dan dipasang pada bsd Diterbitkan di bawah -like lesen. Ia dibangunkan oleh pengaturcara Rusia igor sysoev dan digunakan oleh Rambler (Bahasa Rusia: рамблер), sebuah laman web portal dan enjin carian Rusia yang besar. Ciri-cirinya ialah ia menduduki memori yang kurang dan mempunyai keupayaan konkurensi yang kuat Malah, keupayaan konkurensi nginx berprestasi lebih baik di kalangan pelayan web jenis yang sama. Pengguna tapak web nginx di tanah besar China termasuk: Baidu, Sina, NetEase, Tencent, dll.
Versi terkini nginx ialah 1.9.3 Yang saya muat turun ialah versi tetingkap Secara amnya, senario sebenar adalah untuk memasangnya di bawah sistem Linux, saya akan tidak memperkenalkannya di sini. Alamat muat turun rasmi:. Selepas muat turun selesai, nyahzip dan jalankan nginx.exe untuk memulakan nginx Selepas memulakan, anda akan melihat nginx dalam proses.
Untuk mencapai pengimbangan beban, anda perlu mengubah suai maklumat konfigurasi conf/nginx.conf Selepas mengubah suai maklumat konfigurasi, mulakan semula perkhidmatan nginx ini dicapai melalui perintah nginx -s reload . Di sini kami menggunakan proses batch yang disediakan oleh semut untuk beroperasi.
Letakkan fail nginx.bat ke dalam folder yang sama seperti nginx.exe dan jalankan terus. Semua fail yang digunakan dalam artikel ini akan disediakan pada penghujung artikel.
Pembinaan dan konfigurasi tapak
1 Bina dua tapak iis
Di sana hanyalah halaman indeks ringkas di bawah tapak, yang digunakan untuk mengeluarkan maklumat pelayan semasa. Memandangkan saya tidak mempunyai dua mesin, saya menggunakan kedua-dua tapak ke mesin ini dan port terikat 8082 dan 9000 masing-masing.
protected void page_load(object sender, eventargs e) { label0.text = "请求开始时间:"+datetime.now.tostring("yyyy-mm-dd hh:mm:ss"); label1.text = "服务器名称:" + server.machinename;//服务器名称 label2.text = "服务器ip地址:" + request.servervariables["local_addr"];//服务器ip地址 label3.text = "http访问端口:" + request.servervariables["server_port"];//http访问端口" label4.text = ".net解释引擎版本:" + ".net clr" + environment.version.major + "." + environment.version.minor + "." + environment.version.build + "." + environment.version.revision;//.net解释引擎版本 label5.text = "服务器操作系统版本:" + environment.osversion.tostring();//服务器操作系统版本 label6.text = "服务器iis版本:" + request.servervariables["server_software"];//服务器iis版本 label7.text = "服务器域名:" + request.servervariables["server_name"];//服务器域名 label8.text = "虚拟目录的绝对路径:" + request.servervariables["appl_rhysical_path"];//虚拟目录的绝对路径 label9.text = "执行文件的绝对路径:" + request.servervariables["path_translated"];//执行文件的绝对路径 label10.text = "虚拟目录session总数:" + session.contents.count.tostring();//虚拟目录session总数 label11.text = "虚拟目录application总数:" + application.contents.count.tostring();//虚拟目录application总数 label12.text = "域名主机:" + request.servervariables["http_host"];//域名主机 label13.text = "服务器区域语言:" + request.servervariables["http_accept_language"];//服务器区域语言 label14.text = "用户信息:" + request.servervariables["http_user_agent"]; label14.text = "cpu个数:" + environment.getenvironmentvariable("number_of_processors");//cpu个数 label15.text = "cpu类型:" + environment.getenvironmentvariable("processor_identifier");//cpu类型 label16.text = "请求来源地址:" + request.headers["x-real-ip"]; }
2. Ubah suai maklumat konfigurasi nginx
Ubah suai port mendengar nginx dan ubah suai nilai nod dengar di bawah pelayan http Memandangkan port tempatan 80 sudah diduduki , saya menukarnya Untuk mendengar pada port 8083.
dengar 8083;
Tambah huluan (kluster pelayan) di bawah nod http Tetapan pelayan adalah maklumat pelayan kelompok saya telah membina dua tapak di sini dan mengkonfigurasinya. menerima dua maklumat.
#服务器集群名称为jq_one upstream jq_one { server 127.0.0.1:9000; server 127.0.0.1:8082; }
Cari nod lokasi di bawah nod http dan ubah suainya
location / { root html; index index.aspx index.html index.htm; #修改主页为index.aspx #其中jq_one对应着upstream设置的集群名称 proxy_pass http://jq_one; #设置主机头和客户端真实地址,以便服务器获取客户端真实ip proxy_set_header host $host; proxy_set_header x-real-ip $remote_addr; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; }
Selepas mengubah suai fail konfigurasi, ingat untuk memulakan semula perkhidmatan nginx Maklumat fail konfigurasi lengkap terakhir adalah seperti berikut
3. Hasil berjalan
Lawati http://127.0.0.1:8083/index.aspx, lawatinya beberapa kali dan fokus pada bahagian yang bertanda merah.
Seperti yang anda lihat, permintaan kami diedarkan ke tapak 8082 dan tapak 9000, dan kali pertama ialah tapak 8082 dan kali kedua ialah 9000 . Keputusan sedemikian membuktikan bahawa persediaan pengimbangan beban kami berjaya. Cuba tutup 9000 tapak, dan kemudian muat semula halaman dan ketahui bahawa port http keluaran sentiasa 8082, yang bermaksud bahawa salah satu tapak itu tidak berfungsi Selagi masih ada tapak yang baik, tapak kami masih boleh berkhidmat.
Analisis Masalah
Walaupun kami telah membina tapak pengimbangan beban, masih terdapat masalah berikut.
1. Jika tapak menggunakan sesi dan permintaan diedarkan secara merata ke dua tapak, maka mesti ada masalah perkongsian sesi.
Gunakan pangkalan data untuk menyimpan maklumat sesi dan gunakan nginx untuk memperuntukkan permintaan daripada IP yang sama kepada pelayan tetap seperti berikut. ip_hash akan mengira nilai cincang yang sepadan dengan ip, dan kemudian mengedarkannya ke pelayan tetap
upstream jq_one{
pelayan 127.0.0.1:8082;
pelayan 127.0.0.0. ;
ip_hash;
}
Bina pelayan redis, dan baca sesi daripada pelayan redis. Artikel berikut akan memperkenalkan penggunaan redis cache yang diedarkan
2.管理员更新站点文件,该怎么操作,现在还只有两台服务器,可以手工将文件更新到两台服务器,如果是10台呢,那么手工操作必然是不可行的
多服务器站点更新可以使用goodsync 文件同步程序,会自动检测文件的修改新增,然后同步到其它服务器上。在linux下可以使用rsync
3.站点中的文件上传功能会将文件分配到不同的服务器,文件共享问题如何解决。
使用文件服务器将所有文件存储到该服务器上,文件操作读取写入都在该服务器上。这里同样会存在一个问题,文件服务器存在读写上限。
4.负载的服务器配置不一样,有的高有的低可不可以让配置高的服务器处理请求多一些
这里讲一下,负载均衡有好几种算法 轮转法,散列法,最少连接法,最低缺失法,最快响应法,加权法。我们这里可以使用加权法来分配请求。
upstream jq_one{
server 127.0.0.1:8082 weight=4;
server 127.0.0.1:9000 weight=1;
}
通过weight设置每台服务器分配请求站的权重,值越高分配的越多。
5.由于请求是经过nginx转发过来的,可以在代码里面获取到用户请求的实际ip地址吗?
答案是肯定的,在localtion节点设置如下请求头信息
#设置主机头和客户端真实地址,以便服务器获取客户端真实ip proxy_set_header host $host; proxy_set_header x-real-ip $remote_addr; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
代码里面通过request.headers["x-real-ip"],就能获取到真实ip
Atas ialah kandungan terperinci Analisis contoh penggunaan mudah Nginx+IIS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!