一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。
1.选定源码目录
选定目录 /usr/local/
cd /usr/local/
2.安装PCRE库
cd /usr/local/
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.tar.gz
tar -zxvf pcre-8.21.tar.gz
cd pcre-8.21
./configure
make
make install
3.安装zlib库
cd /usr/local/
wget http://zlib.net/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.8.tar.gz cd zlib-1.2.8
./configure
make
make install
4.安装ssl
cd /usr/local/
wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
tar -zxvf openssl-1.0.1c.tar.gz
./config --prefix=/usr/local/ssl shared zlib-dynamicmake
make install
5.安装nginx
Nginx 一般有两个版本,分别是稳定版和开发版,您可以根据您的目的来选择这两个版本的其中一个,下面是把Nginx 安装到 /usr/local/nginx 目录下的详细步骤:
cd /usr/local/
wget http://nginx.org/download/nginx-1.2.8.tar.gz
tar -zxvf nginx-1.2.8.tar.gz
cd nginx-1.2.8
这步是关键,如果不加的话在配置nginx.conf的时候会报类似这样的错误:
nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/vhost/nginx.conf:8
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module
make
make install
--with-pcre=/usr/src/pcre-8.21 指的是pcre-8.21 的源码路径。
--with-zlib=/usr/src/zlib-1.2.7 指的是zlib-1.2.7 的源码路径。
6.启动
/usr/local/nginx/sbin/nginx –t //测试
/usr/local/nginx/sbin/nginx //启动
提示错误:/usr/local/nginx/sbin/nginx: error while loading shared libraries:libpcre.so.1: cannot open shared object file: No such file or directory
解决方法:
确认已经安装PCRE:
cd /lib
ls *pcre*
libpcre.so.0 libpcre.so.0.0.1
find / -type f -name *libpcre.so.*
添加软链接:
ln -s /lib/libpcre.so.0.0.1 /lib/libpcre.so.1
前面在一般的linux上可以解决此问题.
注: 在有的操作系统上面,安装pcre后,安装的位置为/usr/local/lib/*pcre*
在redhat 64位机器之上有这样的情况.
在redhat 64位机器上, nginx可能读取的pcre文件为/lib64/libpcre.so.1文件.
所以在改用下面的软连接:
ln -s /usr/local/lib/libpcre.so.1 /lib64/
检查是否启动成功:
netstat -ano|grep 80 有结果输入说明启动成功
打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。
7.生成证书:
这步需要找到openssl安装目录下的misc文件夹 和openssl.cnf文件
前面安装openssl时通过--prefix指定的安装目录是/usr/local/ssl
所以misc在 /usr/local/ssl/ssl 下 openssl.cnf 也在其中。
新建一个文件夹,myca 将两个文件拷贝到myca下
#生成工作目录产生CA凭证
ca.crt为自签名证书;
server.crt,server.key为服务器端的证书和私钥文件;
proxy.crt,proxy.key为代理服务器端的证书和私钥文件;
client.crt,client.key为客户端的证书和私钥文件。
具体步骤:
一、怎样获取免费证书
这里提供两个方法:
第一种:如果你是windows用户,且有.keystore格式的证书
那么你可以使用JKS2PFX转换工具,将你的keystore证书转换为PEM证书,操作方法为:cd到工具目录,然后运行命令:
$ JKS2PFX
第二种:如果你是Linux或者OSX系统
生成秘钥key,运行:
$ openssl genrsa -des3 -out server.key 2048
会有两次要求输入密码,输入同一个即可
输入密码
然后你就获得了一个server.key文件.
以后使用此文件(通过openssl提供的命令或API)可能经常回要求输入密码,如果想去除输入密码的步骤可以使用以下命令:
$ openssl rsa -in server.key -out server.key
创建服务器证书的申请文件server.csr,运行:
openssl req -new -key server.key -out server.csr
其中Country Name填CN,Common Name填主机名也可以不填,如果不填浏览器会认为不安全.(例如你以后的url为https://abcd/xxxx….这里就可以填abcd),其他的都可以不填.
创建CA证书:
openssl req -new -x509 -key server.key -out ca.crt -days 3650
此时,你可以得到一个ca.crt的证书,这个证书用来给自己的证书签名.
创建自当前日期起有效期为期十年的服务器证书server.crt:
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
ls你的文件夹,可以看到一共生成了5个文件:
ca.crt ca.srl server.crt server.csr server.key
其中,server.crt和server.key就是你的nginx需要的证书文件.
二、如何配置nginx
打开你的nginx配置文件,搜索443找到https的配置,去掉这段代码的注释.或者直接复制我下面的这段配置:
server {
listen 443 ssl;
server_name 192.168.71.130;
ssl on;
#要使用生成的服务器的证书和key,使用绝对路径
ssl_certificate /usr/soft/server.crt;#配置证书绝对路径
ssl_certificate_key /usr/soft/server.key;#配置秘钥绝对路径
#ssl_client_certificate ca.crt;#双向认证
#ssl_verify_client on; #双向认证
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
将ssl_certificate改为server.crt的路径,将ssl_certificate_key改为server.key的路径.
nginx -s reload 重载配置
至此,nginx的https就可以使用了,默认443端口.
8.重启
/usr/local/nginx/sbin/nginx -s reload
停止: ps –ef |grep nginx
killall nginx
Kill –QUIT 进程号
Kill –TERM 进程
Pkill –q nginx
9.修改配置文件
cd /usr/local/nginx/conf
vi nginx.conf
============================nginx.conf==========================
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
#本机的ip地址:https的端口号443
listen 192.168.62.128:443;
ssl on;
#要使用生成的服务器的证书和key,使用绝对路径
ssl_certificate /etc/pki/CA/certs/server.crt;
ssl_certificate_key /etc/pki/CA/private/server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#定义在浏览器里输入的网址
server_name www.mynginx20140416.com;
--------------------------------------此为双向认证------------------------------------------
server {
#本机的ip地址:https的端口号443
#listen 192.168.71.130:443;
listen 80;
listen 443 ssl;
server_name 192.168.71.130;
#ssl on;
#要使用生成的服务器的证书和key,使用绝对路径
ssl_certificate /usr/soft/server.crt;
ssl_certificate_key /usr/soft/server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}
---------------------------------------------------------------------------------------------
location / {
root /nginxhome;
#/nginxhome 下的两个文件,index.html 和index.htm 里面是连接后显示的内容
index index.html index.htm;
}
location =/50x.html {
root html;
}
}
}
10.配置完成后重启服务器
本机直接输入定义的https://www.mynginx20140416.com
其他机器的浏览器输入:ip地址:443
如果访问不了的话,使用setup命令关掉服务器的防火墙。
使用curl 测试
Curl –k https://192.168.62.128:443
显示你在/nginxhome目录下的index.html中输入的内容证明搭建成功了
向服务器传送文件
Curl –T localfile –k https://192.168.62.128:443
如果出现
<html>
<head><title>405Not Allowed</title></head>
<bodybgcolor="white">
<center><h1>405Not Allowed</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>
说明需要加入PUT GET 等方法
在安装编译nginx时加入 --with-http_dav_module这个模块
./configure --with-http_dav_module
在/usr/local/nginx/conf/nginx.conf中修改
location / {
root /var/www;
dav_methods PUT;
}