天天看点

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,如需转载请自行联系原作者

继续阅读