出現這個問題,主要是因為session丢失問題,需要加一個子產品nginx-sticky-module,可以防止session丢失(使用Nginx sticky子產品實作基于cookie的負載均衡)。
2. 安裝ssl(如果已經安裝了,就不需要安裝了,sticky子產品依賴這個包)
<code>yum </code><code>install</code> <code>openssl </code>
<code>yum </code><code>install</code> <code>openssl-devel</code>
3、重新添加子產品,編譯
<code>.</code><code>/configure</code> <code>--prefix=</code><code>/application/nginx-1</code><code>.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --add-module=</code><code>/data/nginx-sticky-module-1</code><code>.1</code>
<code>make</code>
期間會報各種錯,需要修改vim /data/nginx-sticky-module-1.1/ngx_http_sticky_module.c
第6行添加一行
<code>#include <nginx.h></code>
<code>#include <ngx_config.h></code>
<code>#include <ngx_core.h></code>
<code>#include <ngx_http.h></code>
第332行附近
<code> </code><code>ngx_log_debug(NGX_LOG_DEBUG_HTTP, pc->log, 0, </code><code>"[sticky/get_sticky_peer] peer found at index %i"</code><code>, selected_peer)</code>
<code>;</code>
<code>#if defined(nginx_version) && nginx_version >= 1009000</code>
<code> </code><code>iphp->rrp.current = peer;</code>
<code>#else</code>
<code> </code><code>iphp->rrp.current = iphp->selected_peer;</code>
<code>#endif</code>
修改 vim /data/nginx-sticky-module-1.1/ngx_http_sticky_misc.c 第281行
改成
<code> </code><code>digest->len = ngx_sock_ntop(</code><code>in</code><code>, sizeof(struct sockaddr_in), digest->data, len, 1);</code>
儲存退出
重新
成功
不要再make install 不然就重新安裝了nginx
4.關閉原來的nginx
<code>killall nginx</code>
5. 複制編譯後的二進制檔案到目錄
<code>cp</code> <code>/application/nginx/sbin/nginx</code><code>{,.bak} 先備份</code>
<code>cp</code> <code>/data/nginx-1</code><code>.10.2</code><code>/objs/nginx</code> <code>/application/nginx/sbin/nginx</code> <code>再複制指令</code>
6. 修改配置nginx檔案,使插件sticky生效
<code>[root@master conf]</code><code># vim /application/nginx/conf/nginx.conf</code>
在upstream中添加sticky;
<code>http { </code>
<code> </code><code>upstream uec_portal{ </code>
<code> </code><code>#添加sticky子產品後加入此配置 </code>
<code> </code><code>sticky; </code>
<code> </code><code>#被代理的服務 </code>
<code> </code><code>server 192.168.12.56:80; </code>
<code> </code><code>server 192.168.12.70:8080; </code>
<code> </code><code>} </code>
<code> </code>
<code> </code><code>server { </code>
<code> </code><code>#nginx監聽的端口 </code>
<code> </code><code>listen 80; </code>
<code> </code><code>server_name localhost; </code>
<code> </code><code>location / { </code>
<code> </code><code>#代理 </code>
<code> </code><code>proxy_pass http:</code><code>//uec_portal</code><code>; </code>
<code> </code><code>} </code>
<code> </code><code>} </code>
<code>}</code>
7. 測試配置檔案是否OK
<code>[root@master conf]</code><code># /application/nginx/sbin/nginx -t</code>
<code>Enter PEM pass phrase:</code>
<code>nginx: the configuration </code><code>file</code> <code>/application/nginx-1</code><code>.10.2</code><code>/conf/nginx</code><code>.conf syntax is ok</code>
<code>nginx: configuration </code><code>file</code> <code>/application/nginx-1</code><code>.10.2</code><code>/conf/nginx</code><code>.conf </code><code>test</code> <code>is successful</code>
8.啟動nginx
<code>[root@master conf]</code><code># /application/nginx/sbin/nginx</code>
9.測試。
至此session丢失問題就解決了。
本文轉自 藍葉子Sheep 51CTO部落格,原文連結:http://blog.51cto.com/dellinger/2048675,如需轉載請自行聯系原作者