# 4. 在線升級(jí)
#### 1. 緣由
公司有一個(gè)項(xiàng)目,需要用到websocket,所謂websocket是基于tcp/ip的協(xié)議,它跟http協(xié)議是同等級(jí)的。它解決的問題是長(zhǎng)輪循的資源消耗問題。也就是用它做類似長(zhǎng)輪循的應(yīng)用時(shí),因?yàn)楸旧韰f(xié)議的支持,資源消耗是較低的。類似的應(yīng)用可以是聊天室,通知系統(tǒng),股票實(shí)時(shí)更新等。具體的我們不再細(xì)說。由于我們項(xiàng)目是部署在nginx上的,用的ruby on rails開發(fā)的,使用的gem是[actioncable](https://github.com/rails/actioncable)。rails程序是用unicorn部署的,websocket是用puma來部署,也是actioncable默認(rèn)建議的。也就是兩個(gè)程序,一個(gè)是web的,一個(gè)是websocket的。兩個(gè)都是掛在nginx下。nginx作為反向代理服務(wù)器,代理請(qǐng)求到unicorn或puma,unciron或puma處理后,交給nginx,nginx再轉(zhuǎn)發(fā)給客戶端。nginx作為高性能的服務(wù)器,起到緩沖作用,主要的壓力也是集中在nginx上,這也是一般rails程序的部署情況。
之前unicorn是部署好的。這個(gè)時(shí)候要加上puma。仿照unicorn在nginx的配置,puma在nginx也是一樣的。都是用proxy\_pass加上upstream就可以搞定。關(guān)于nginx的具體配置問題可以查看本站nginx相關(guān)的文章。這里不再詳述。
配置好了。剛開始第一次發(fā)出請(qǐng)求可以成功的,因?yàn)槲冶O(jiān)控了puma的日志,能夠產(chǎn)生正確的請(qǐng)求日志,但發(fā)出第二次就不行了,總是超時(shí)。最后我查到了原因,原來是nginx在1.4以上才支持websocket。我發(fā)現(xiàn)線上centos用yum安裝的nginx版本才是1.0,真是醉了。關(guān)于如果如何查看websocket請(qǐng)求的問題可以查看本站websocket相關(guān)的文章。
我想給nginx來個(gè)升級(jí),但最好是無破壞的升級(jí)。假如你在線上還有程序在跑,你可不能破壞掉。不然由此造成的業(yè)務(wù)損失,可得怪你。
#### 2. 升級(jí)過程
在安裝前先執(zhí)行下面的命令,這是我安裝過程中遇到的問題。先安裝就能避免了。
```
sudo yum -y install pcre-devel openssl openssl-devel
```
在官網(wǎng)上找到了nginx的最新穩(wěn)定版本,下載下來,然后解壓縮。
```
cd nginx
./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-pcre \
--with-file-aio \
--with-http_realip_module \
--without-http_scgi_module \
--without-http_uwsgi_module \
--without-http_fastcgi_module
make
sudo make install
```
關(guān)于這里面的參數(shù),可以使用`nginx -V`查看。
這個(gè)時(shí)候已經(jīng)安裝完畢了,但是你還沒有用新nginx來啟動(dòng),還有,老的nginx還在用著呢,如何無縫啟動(dòng)呢。
Makefile提供了一個(gè)命令
```
sudo make upgrade
```
就好了。這樣可以殺死舊的nginx進(jìn)程,用新的來代替。詳細(xì)的你可以查看Makefile文件。
完結(jié)。
- 介紹
- 安裝
- 1. 基本介紹和配置文件語法
- 2. 反向代理
- 3. gzip 壓縮提升網(wǎng)站性能
- 4. 在線升級(jí)
- 5. 監(jiān)控工具 ngxtop
- 6. 編譯第三方模塊
- 7. auth_basic 模塊使用
- 8. 日志分析工具
- 9. 用 nginx 搭建谷歌鏡像網(wǎng)站
- 10. 自制啟動(dòng)腳本
- 11. 日志切割
- 12. 作為負(fù)載均衡器
- 13. 開啟 debug 模式
- 14. gzip static 模塊探索
- 15. 安裝最新 nginx 的另類方法
- 16. 使用 acme.sh 安裝 Let’ s Encrypt 提供的免費(fèi) SSL 證書
- 17. 給 GitLab 應(yīng)用加上 https
