首頁 > 運維 > Nginx > 主體

Nginx+IIS簡單部署實例分析

WBOY
發布: 2023-06-04 09:36:15
轉載
2361 人瀏覽過

nginx簡介:

nginx (“engine x”) 是一個高效能的 http 和 反向代理 伺服器,也是一個 imap/pop3/smtp 代理伺服器 。 nginx 是由 igor sysoev 為俄羅斯訪問量第二的rambler.ru 站點開發的,它已經在該站點運行超過四年多了。 igor 將原始碼以類bsd許可證的形式發布。自從nginx 發布四年來,nginx 已經因為它的穩定性、豐富的功能集、 範例設定檔和低系統資源的消耗而聞名了。目前國內各大入口網站已經部署了nginx,如新浪、網易、騰訊等;國內幾個重要的影片分享網站也部署了nginx,如六房間、酷6等。新近發現nginx 技術在國內日趨火熱,越來越多的網站開始部署nginx。這邊都是網路上說的。

nginx安裝

nginx是一款輕量級的web 伺服器/反向代理伺服器及電子郵件(imap/pop3)代理伺服器,並在一個bsd -like 協議下發行。由俄羅斯的程式設計師igor sysoev所開發,供俄國大型的入口網站及搜尋引擎rambler(俄文:рамблер)使用。其特點是佔有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站用戶有:百度、新浪、網易、騰訊等。

最新版本的nginx版本為1.9.3,我這下載的是window版本的,一般實際場景都是安裝在linux系統下的,由於linux系統目前正在摸索中這裡就不介紹。官方下載地址:。下載完成之後解壓縮執行nginx.exe就啟動了nginx了,啟動後會在進程裡面看到nginx。

Nginx+IIS簡單部署實例分析Nginx+IIS簡單部署實例分析

要實現負載平衡需要修改conf/nginx.conf的設定訊息,修改設定資訊之後重新啟動nginx服務,可以透過nginx -s reload指令實現。這裡我們使用ants提供的一個批次來操作。

Nginx+IIS簡單部署實例分析

將nginx.bat檔案放到nginx.exe相同資料夾下,直接執行就行了。文章結尾會提供本文所用到的所有文件。

Nginx+IIS簡單部署實例分析

網站建置及設定

#1.建置兩個iis網站

#網站下只有一個簡單的index頁面,用來輸出目前伺服器資訊。由於我沒有兩台機器,所以將兩個站點都部署到本機了,分別綁定了8082和9000兩個連接埠。

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.修改nginx配置資訊

修改nginx監聽端口,修改http server下的listen節點值,由於本機80端口已經被佔用,我改為監聽8083端口。

listen 8083;

在http節點下新增upstream(伺服器叢集),server設定的是叢集伺服器的信息,我在這裡搭建了兩個站點,配置了兩個訊息。

#服务器集群名称为jq_one
upstream jq_one {
  server 127.0.0.1:9000;
  server 127.0.0.1:8082;
}
登入後複製

在http節點下找到location節點修改

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;
}
登入後複製

修改完成設定檔以後記得重啟nginx服務,最後完整設定檔資訊如下

Nginx+IIS簡單部署實例分析

3.運行結果

訪問http://127.0.0.1:8083/index.aspx ,多訪問幾次,專注於標紅部分。

Nginx+IIS簡單部署實例分析Nginx+IIS簡單部署實例分析

可以看到,我們的請求被分發到了8082站點和9000站點,第一次是8082站點第二次9000。出現這樣的結果證明我們負載平衡搭建成功了。嘗試關閉其中的9000站點,然後刷新頁面發現輸出的http端口一直是8082,也就是說其中一個站點掛了,只要還有一個站點是好的,我們的還是可以服務。

問題分析

雖然我們已經建立了負載平衡站點,但是還存在以下問題。

1.如果站點使用了session,請求平均分配到兩個站點,那麼必然存在session共享問題,該如何解決?

使用資料庫儲存session資訊使用nginx將相同ip的請求分配到固定伺服器,修改如下。 ip_hash會計算ip對應hash值,然後被指派到固定伺服器

upstream jq_one{
  server 127.0.0.1:8082 ;
   server 127.0.0.1:9000
  }

建置一台redis伺服器,session的讀取都會從該redis伺服器上讀取。後面的文章將介紹分散式快取redis的使用

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

以上是Nginx+IIS簡單部署實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板