天天看點

Nginx添加stickky保持會話共享

出現這個問題,主要是因為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 &lt;nginx.h&gt;</code>

<code>#include &lt;ngx_config.h&gt;</code>

<code>#include &lt;ngx_core.h&gt;</code>

<code>#include &lt;ngx_http.h&gt;</code>

第332行附近

<code>                </code><code>ngx_log_debug(NGX_LOG_DEBUG_HTTP, pc-&gt;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) &amp;&amp; nginx_version &gt;= 1009000</code>

<code>                </code><code>iphp-&gt;rrp.current = peer;</code>

<code>#else</code>

<code>                </code><code>iphp-&gt;rrp.current = iphp-&gt;selected_peer;</code>

<code>#endif</code>

修改  vim /data/nginx-sticky-module-1.1/ngx_http_sticky_misc.c 第281行

改成

<code>        </code><code>digest-&gt;len = ngx_sock_ntop(</code><code>in</code><code>, sizeof(struct sockaddr_in), digest-&gt;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,如需轉載請自行聯系原作者

繼續閱讀