为CentOS升级OpenSSL 让Nginx支持TLS 1.2

最近在调试微信小程序时,发现wx.request请求总是无法正确获取服务器端的数据,经过检查发现是因为服务器端https不支持微信要求的TLS 1.2版本。

登录到服务器上,用openssl version -a命令查询,发现版本是0.9.8e,查阅文档得知OpenSSL从1.0.1开始才支持TLS 1.2,那么我们就来对OpenSSL进行个升级。

准备工作:
1.下载新版OpenSSL源码包https://www.openssl.org/source/openssl-1.0.1u.tar.gz
2.开启主机的telnet,以防升级过程中遇到问题,可通过telnet补救。

阅读更多

转载:Nginx多站点虚拟主机实现独立启动停止php-fpm和权限控制设置

说明:

站点1:bbs.osyunwei.com 程序所在目录/data/osyunwei/bbs

站点2:sns.osyunwei.com 程序所在目录/data/osyunwei/sns

相关配置文件目录:

nginx主配置文件:/usr/local/nginx/conf/nginx.conf

php安装目录:/usr/local/php5/

站点1虚拟主机配置配置文件:/usr/local/nginx/conf/vhost/bbs.conf

站点2虚拟主机配置配置文件:/usr/local/nginx/conf/vhost/sns.conf

实现目的:

1、可以对站点1和站点2单独启动、停止php-fpm

2、站点1和站点2的php运行权限相互隔离,不能跨目录浏览,即站点1内的php木马不能访问站点2中的内容,

同理,站2内的php木马不能访问站点1中的内容。

实现方法:

阅读更多

解决Nginx环境下PHP的flush失效问题

我在一次调试PHP逐行输出时候,发现ob_flush和flush两个都失效了,通过phpinfo基本能判断php.ini的设置是正常的。

再去看Nginx,发现Nginx中,有如下的设置:

fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;

问题基本找到了,Nginx会缓冲PHP输出的信息,当达到128k时才会将缓冲区的数据发送给客户端,那么我们首先需要将这个缓冲区调小,比如:

fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;

并且,必须禁用gzip

gzip off;

然后,在php中,在ob_flush和flush前,输出一段达到4k的内容,例如:

echo str_repeat(‘ ‘, 1024*4);

到此,PHP就可以正常通过ob_flush和flush逐行输出需要的内容了。

Nginx图片防盗链设置方法

图片盗链行为对网站负载和带宽均会造成不同程度的影响和消耗,有必要对这种行为加以限制,Nginx的防盗链设置非常简单,设置方法如下。

打开nginx.conf,在需要启用防盗链机制的server{}中,加入下面的代码:

location ~ .*\.(bmp|gif|jpg|jpeg|png|swf)$ {
valid_referers none blocked *.youdomain.com youdomain.com;
if ($invalid_referer) {
return 403;
}
}

上面代码中的youdomain.com更换成你的域名即可。

在Godaddy购买VPS心得

由于无法继续忍受和千军万马共挤虚拟主机。近日,我为阳光部落(http://www.sunbloger.com/)从Godaddy(http://www.godaddy.com/)上购买了VPS主机,下面是我在购买和使用中的一些感受和心得。

在Godaddy主页的All Products菜单中,选择Hosting & Servers,再在弹出的菜单中选择VPS项目,就可以进入VPS主机的选购页面了,后面的购买和付款流程与买虚拟主机没有区别,就不详细说了。但需要注意的是机房会被默认到Godaddy新加坡数据中心,从这几年的经验来看,新加坡机房的效果不如美国本土好。

vps01

目前Godaddy的VPS提供三种操作系统供用户选择,分别是CentOS、Fedora和Windows,对于服务器来说,特别是打算用Linux作为服务器操作系统时,CentOS是最好的选择。

vps02

购买后的VPS需要在Godaddy上开通,在开通过程中需要提供一个账号和密码,用于通过SSH登录到服务器上。但Godaddy的VPS不支持直接root登录,需要以预先设置的账号登录后,再su切换到root。

我购买的CentOS系统的VPS十分精简,如果喜欢自己编译安装的方式去部署一些软件,经常会遇到提示缺少某某组件,直接通过yum安装所需组件即可。

在我安装并启动Nginx时,提示我80端口已被占用,用netstat –tulpn命令查询后发现VPS中已经安装有httpd,占用了80端口。停掉httpd,再次启动Nginx,一切正常了!

Nginx构建负载均衡集群的配置方法

假设我们有3台服务器,IP地址分别为:
192.168.0.1 / 192.168.0.2 / 192.168.0.3

我们将192.168.0.1作为前端主服务器,192.168.0.2和192.168.0.3作为负载均衡的后端服务器。

下面是192.168.0.1主服务器上Nginx的配置方法:
worker_processes 1;

events {
worker_connections 1024;
}

http {
upstream serverlist {
server 192.168.0.2:8000 weight=3 max_fails=3 fail_timeout=20s;
server 192.168.0.3:8000 weight=7 max_fails=3 fail_timeout=20s;
}

server {
listen 80;
server_name www.sunbloger.com;
location / {
proxy_pass         http://serverlist;
proxy_set_header   HOST             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}
}
}

配置说明:
upstream serverlist{}可以理解为一个服务器池,通过proxy_pass http://serverlist命令,可将访问www.sunbloger.com的请求分配给位于池内的服务器192.168.0.2和192.168.0.3。
weight=3和weight=7为服务器的权重,权重越高,被分配到的请求就越多。
max_fails=3和fail_timeout=20s的含义是,当请求失败次数达到3次时,这个服务器将被暂时下线20秒。

技巧:主服务器可负责静态内容,将所有php的请求分配到后端服务器处理。

转载请注明:阳光部落原创,更多内容请访问http://www.sunbloger.com/

按小时切割Nginx日志的Shell脚本

在公司服务器上的Nginx日志是每天切割一次,随着访问量的上升,每天产生的日志体积也随之变大。

正好最近要开发一个对Nginx日志分析的工具,借此机会把公司服务器上Nginx日志的切割时间间隔调整为一个小时,用于切割日志的Shell脚本如下:

#!/bin/bash
# Every hour running time.
# by Jason.wei.

# The Nginx logs path
log_year=$(date +"%Y")
log_month=$(date +"%m")
log_day=$(date +"%d")
log_hour=$(date +"%H")
logs_path="/usr/local/nginx/logs/"
save_path="/usr/local/nginx/logs/$log_year-$log_month/$log_day/"

if [ ! -d "$save_path" ]; then
mkdir -p "$save_path"
fi

mv ${logs_path}access.log ${save_path}access_${log_year}${log_month}${log_day}_${log_hour}.log

if [ $log_hour = 00 ]; then
mv ${logs_path}error.log ${save_path}error_$log_year$log_month$log_day.log
fi

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

Nginx不间断服务的平滑升级方法

这是站长最近一次给服务器上Nginx升级的笔记,版本是从正在服役的1.0.12升级到1.0.15。

 

第一步:备份旧版的Nginx和配置文件

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/bak_nginx //备份旧版程序

cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/bak_nginx.conf //备份配置文件

 

第二步:编译新版的Nginx

tar zxvf ./nginx-1.0.15.tar.gz

cd nginx-1.0.15

./configure –prefix=/usr/local/nginx –with-http_stub_status_module –user=www –group=www

make

make install

 

第三步:检查新版是否正常

/usr/local/nginx/sbin/nginx -V //检查版本信息是否正确

/usr/local/nginx/sbin/nginx -t //测试新版本Nginx配置是否正常,如看到xxxxxx test is successful的提示,说明配置正常

 

第四步:切换新旧版工作进程

kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

Nginx出现“413 Request Entity Too Large”的解决方法

周末刚刚给公司的一台服务器更换了 Nginx ,编辑们在后台上传图片时,浏览器中总报如下错误:

413 Request Entity Too Large

先检查了 php.ini 文件,发现相关的设置都正常,后来想起来 Nginx 的配置文件中少设了一个参数:

client_max_body_size 8m;

将上面这行设置参数添加到 Nginx 配置文件 nginx.conf 的 http{…} 段中即可。