nginx 1.9.7安装使用

本文介绍nginx 1.9.7的安装,并启用http、https访问。

By 泪痕之木

实验环境

操作系统:CentOS 6.7

IP:192.168.80.60

主机名:CentOS6

YUM软件包安装:CentOS默认提供的在线YUM源

openssl版本:openssl-1.0.2d.tar.gz(openssl官网获取)

nginx版本:nginx-1.9.7.tar.gz(nginx官网获取)

1 依赖包安装

安装openssl和nginx之前,需要先安装一些依赖包:gcc、pcre、zlib

1、nginx gzip模块需要zlib库

2、nginx rewrite模块需要pcre库

3、nginx ssl模块需要openssl库

[[email protected] ~]# yum install gcc\* pcre\* zlib\* –y

2 Nginx安装

将nginx和openssl源码包上传至服务器,这里上传到了 /root 目录

openssl解压即可,并不需要安装

[[email protected] ~]# tar zxvf openssl-1.0.2d.tar.gz

[[email protected] ~]# tar zxvf nginx-1.9.7.tar.gz

[[email protected] ~]# cd nginx-1.9.7

配置nginx安装选项

[[email protected] nginx-1.9.7]# ./configure --prefix=/usr/local/nginx --with-openssl=/root/openssl-1.0.2d --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module

--with-openssl=<openssl_dir> 指定openssl源码包解压后的路径

--with-http_ssl_module 启用SSL模块

配置完毕后可以看到一个配置概要,概要中的5项必须都有了相应的库支持

安装nginx

[[email protected] nginx-1.9.7]# make && make install

安装完毕后,安装包和解压后的文件都可以删除

[[email protected] nginx-1.9.7]# cd ..

[[email protected] ~]# rm -fr openssl* nginx*

3 Nginx访问

3.1 HTTP访问

关闭防火墙,并取消防火墙开机自启动

[[email protected] ~]# service iptables stop

[[email protected] ~]# chkconfig iptables off

启动Nginx

[[email protected] ~]# cd /usr/local/nginx

[[email protected] nginx]# ./sbin/nginx

Nginx启动后,查看HTTP端口已经监听,HTTP端口默认为80

[[email protected] nginx]# netstat -an|grep :80

使用浏览器访问如下地址,如果出现截图页面,证明Nginx访问成功

http://192.168.80.60

   

3.2 HTTPS访问

首先需使用openssl生成PEM格式证书(或使用Windows证书颁发机构生成PFX格式证书,再转换为PEM格式)供nginx ssl模块使用。此部分请参考本人另外的文章《openssl安装使用》或《ActiveDirectory证书服务》。

3.2.1 修改nginx.conf

创建ssl目录,将证书和私钥上传至/usr/local/nginx/conf/ssl目录

[[email protected] nginx]# mkdir conf/ssl

编辑nginx配置文件,开启SSL访问,指定SSL协议、证书、私钥文件

[[email protected] nginx]# vim conf/nginx.conf

将上述部分配置注释取消,并修改为如下配置

这里使用的通配符证书:*.lhzm.com

# HTTPS server

#

server {

listen 443 ssl;

server_name www.lhzm.com;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_certificate ssl/lhzmcert.pem;

ssl_certificate_key ssl/lhzmkey.pem;

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;

ssl_prefer_server_ciphers on;

location / {

root html;

index index.html index.htm;

}

}

由于私钥加密,所以配置了HTTPS之后,重新启动nginx需要输入私钥加密口令

[[email protected] nginx]# sbin/nginx -s reload

Enter PEM pass phrase: 123456

经测试,使用reload重新启动nginx后,HTTPS并不生效,必须重启系统。

系统重新启动后,启动nginx,查看443端口是否开放

[[email protected] nginx]# netstat -an | grep :443

3.2.2 添加本地解析

如果在安装nginx的本机访问nginx,在/etc/hosts文件中添加本地解析

[[email protected] nginx]# vim /etc/hosts

如果在其他外部计算机访问nginx,例如一台Windows,则在Windows添加本地解析

3.2.3 验证访问

使用浏览器打开https://www.lhzm.com

可以看到如下提示:不受信任的连接。

由于颁发证书的CA不受本计算机信任,所以发布的证书也不被信任。通常我们访问的银行等HTTPS站点为什么没有这个提示呢?因为这些公众HTTPS站点的证书购买自一些受信任的第三方证书颁发机构,而这些第三方证书颁发机构的根证书默认已经内置在我们的计算机,所以他们发布的证书被信任。

添加例外

确认安全例外

HTTPS访问成功

点击锁状图标-更多信息

可以看到和HTTPS站点通信使用的密码套件

查看证书,可以看到证书的信息和颁发该证书的CA的信息

3.3 SSL语法

3.3.1 ssl

语法:ssl [on|off]

默认值:ssl off

使用字段:main, server

开启HTTPS

说明:较新版本的nginx,例如本文使用的nginx 1.9.7,可以直接使用语法: listen 443 ssl

3.3.2 ssl_certificate

语法:ssl_certificate file

默认值:ssl_certificate cert.pem

使用字段:main, server

为这个虚拟主机指定PEM格式的证书文件,这个文件可以包含其他的证书和服务器私钥,同样,密钥也必须是PEM格式,0.6.7版本以后,这里的路径为相对于nginx.conf的路径,而不是编译时的prefix路径。

3.3.3 ssl_certificate_key

语法:ssl_certificate_key file

默认值:ssl_certificate_key cert.pem

使用字段:main, server

为这个虚拟主机指定PEM格式的私钥,0.6.7版本以后,这里的路径为相对于nginx.conf的路径,而不是编译时的prefix路径。

3.3.4 ssl_client_certificate

语法:ssl_client_certificate file

默认值:none

使用字段:main, server

指出包含PEM格式的CA(root)证书,它将用于检查客户端证书。

3.3.5 ssl_dhparam

语法:ssl_dhparam file

默认值:none

使用字段:main, server

该指令指定了一个PEM格式的文件,其中包含的Diffie-Hellman密钥协商协议密码参数,它将用于服务器和客户端之间的会话密钥交换。(翻译来自Google。- -!)

原文:This directive specifies a file containing Diffie-Hellman key agreement protocol cryptographic parameters, in PEM format, utilized for exchanging session keys between server and client

3.3.6 ssl_ciphers

语法:ssl_ciphers file

默认值:ssl_ciphers HIGH:!aNULL:!MD5;

使用字段:main, server

指出为建立安全连接,服务器所允许的密码格式列表,密码指定为OpenSSL支持的格式,每个密码之间用“ : ”分开。如:

ssl_ciphers HIGH:!aNULL:!MD5:!ECDHE:!EDH:!DHE:!ECDH;

如果希望ssl优先使用哪种密码,在ssl_prefier_server_ciphers 开启的情况下,直接指定出希望使用的密码。

ssl_ciphers TLS_RSA_WITH_AES_128_CBC_SHA:TLS_RSA_WITH_AES_256_CBC_SHA:TLS_RSA_WITH_AES_128_CBC_SHA256:TLS_RSA_WITH_AES_256_CBC_SHA256:HIGH:!aNULL:!MD5:!ECDHE:!EDH:!DHE:!ECDH;

如果不希望使用一个密码,则在该指令下禁用该密码,如禁用ECDHE类型密码:

ssl_ciphers HIGH:!aNULL:!MD5:!ECDHE;

查看当前安装的OpenSSL版本所支持的密码列表,可以使用下列命令:

[[email protected] ~]# openssl ciphers

3.3.7 ssl_crl

语法:ssl_crl file

默认值:none

使用字段:http, server

指令可用于0.8.7以后版本,用于指定一个证书吊销列表的文件名,使用PEM格式,它将用于检查证书吊销状态。

3.3.8 ssl_prefer_server_ciphers

语法:ssl_prefer_server_ciphers [on|off]

默认值:ssl_prefer_server_ciphers off

使用字段:main, server

依赖SSLv3和TLS协议的服务器密码将优先于客户端密码。

3.3.9 ssl_protocols

语法:ssl_protocols [SSLv2] [SSLv3] [TLSv1]

默认值:ssl_protocols SSLv2 SSLv3 TLSv1

使用字段:main, server

指定要开启的SSL协议。

3.3.10 ssl_verify_client

语法:ssl_verify_client on|off|optional

默认值:ssl_verify_client off

使用字段:main, server

启用客户端身份验证,参数“optional”将使用客户端提供的证书检查它的权限(0.8.7与0.7.63版本之前为”ask”)。

3.3.11 ssl_verify_depth

语法:ssl_verify_depth number

默认值:ssl_verify_depth 1

使用字段:main, server

设置服务器按顺序检查客户端提供的证书链的长度。

3.3.12 ssl_session_cache

语法:ssl_session_cache off|none|builtin:size and/or shared:name:size

默认值:ssl_session_cache off

使用字段: main, server

设置储存SSL会话的缓存类型和大小。

缓存类型为:

off - 强制关闭:nginx告诉客户端这个会话已经不能被再次使用。

none - 非强制关闭:nginx告诉客户端这个会话可以被再次使用,但是nginx实际上并不使用它们,这是为某些使用ssl_session_cache的邮件客户端提供的一种变通方案,可以使用在邮件代理和HTTP服务器中。

builtin - 内建OpenSSL缓存,仅能用在一个工作进程中,缓存大小在会话总数中指定,注意:如果要使用这个类型可能会引起内存碎片问题,具体请查看下文中参考文档。

shared - 缓存在所有的工作进程中共享,缓存大小指定单位为字节,1MB缓存大概保存4000个会话,每个共享的缓存必须有自己的名称,相同名称的缓存可以使用在不同的虚拟主机中。

可以同时使用两个缓存类型,内建和共享,如:

ssl_session_cache builtin:1000 shared:SSL:10m;

但是,使用共享缓存而不使用内建缓存将更为有效。

0.8.34版本之前如果ssl_verify_client设置为‘on‘或者‘optional‘时这里不能设置为none或off。

注意,为了让缓存恢复工作,你需要在服务器为SSL socket配置默认服务器,例如:

listen [::]:443 ssl default_server;

这是因为缓存的重用发生在任何TLS扩展启用之前,即服务器名称认证(Server Name Identification (SNI)),来自一个指定IP地址(服务器)的ClientHello信息请求一个会话ID,为了使其工作,默认(default)服务器必须被设置。

最好的方法是将ssl_session_cache放到http字段,这样下面配置的server/虚拟主机字段都将得到相同的SSL缓存配置。

3.3.13 ssl_session_timeout

语法:ssl_session_timeout time

默认值:ssl_session_timeout 5m

使用字段: main, server

设置客户端能够反复使用储存在缓存中的会话参数时间。

3.3.14 ssl_engine

语法:ssl_engine

指定使用的OpenSSL引擎,如Padlock,例如PadLock,下列命令可以查看你的OpenSSL支持的引擎:

3.3.15 openssl engine

Debian系统在版本0.9.8o的OpenSSL运行后返回:

$ openssl engine

(padlock) VIA PadLock (no-RNG, no-ACE)

(dynamic) Dynamic engine loading support

内置变量

ngx_http_ssl_module模块支持下列内建变量:

$ssl_cipher - 返回建立的SSL连接中那些使用的密码字段。

$ssl_client_serial - 返回建立的SSL连接中客户端证书的序列号。

$ssl_client_s_dn - 返回建立的SSL连接中客户端证书的DN主题字段。

$ssl_client_i_dn - 返回建立的SSL连接中客户端证书的DN发行者字段。

$ssl_protocol - 返回建立的SSL连接中使用的协议。

$ssl_session_id - 需要0.8.20以上版本。

$ssl_client_cert

$ssl_client_raw_cert

$ssl_client_verify - 如果客户端证书审核通过,这个变量为“SUCCESS”。

非标准错误代码

这个模块支持一些非标准的HTTP错误代码,可以借助error_page指令用于调试:

495 - 检查客户端证书时发生错误。

496 - 客户端无法提供必须的证书。

497 - 传送到HTTPS的普通请求。

在请求完整的废除后调试完成,并取得一些内置变量,如:$request_uri, $uri, $arg等。

3.4 信任证书

如果希望信任一个证书或信任一个CA,可以将该用户证书或CA证书导入本地计算机“受信任的根证书颁发机构”。之后再访问使用该用户证书的站点或该使用该CA发布证书的站点,默认站点将被信任。

这里演示CA证书导入到Windows计算机的“受信任的根证书颁发机构”。

首先,将由openssl生成的CA证书cacert.pem更改后缀名,修改为Windows识别的.crt后缀。

双击证书后,安装证书

本地计算机

浏览至“受信任的根证书颁发机构”

完成

导入成功,确定

说明:上面讲述的理论是正确的,但随着现在操作系统和浏览器的安全机制不断加强,实际操作时该方法一般并不生效,因为浏览器等关联了更多的证书验证方式,不再仅仅依靠内置的根证书验证。

可以参考下图以搜狗浏览器为例的两个站点对比,其中www.lhzm.com使用了自己搭建CA的证书,并已经将证书导入“受信任的根证书颁发机构”。

时间: 2024-10-03 13:27:25

nginx 1.9.7安装使用的相关文章

nginx在linux下安装

安装前先确认是否已经安装编译包和一些依赖包如果没有安装: yum install pcre* yum install openssl* yum install zlib yum install zlib-devel yum install wget 查看是否已经安装好 rpm -qa | grep "查看的内容" 2.开始安装nginx wget http://nginx.org/download/nginx-1.8.0.tar.gz 3. 解压 如果你想把安装包复制到别处 可以  c

Nginx专题: 从编译安装到URL重写

Nginx专题: 从编译安装到URL重写 前言 本文主要实现使用Nginx作为Web服务器, 并使用URL Rewrite实现将手机对Web站点的请求专门重写到一个专门为手机定制的Web页面中 环境介绍 笔者只有一台虚拟机, 桥接到室内的路由器便于手机进行访问, IP地址为192.168.1.103 Nginx介绍 engine x发音同Nginx, 作者是Igor Sysoev,是目前世界上占有率第三的Web服务器软件. Nginx是一款轻量级的Web服务器,可实现反向代理,URL rewri

PXE+Kickstart+Nginx(http)+DHCP无人值守安装Centos6.4系统

PXE+Kickstart+Nginx(http)+DHCP无人值守安装Centos系统 1.1 什么是PXE PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast

nginx基础及编译安装

nginx是http服务器和反向代理服务器,又是IMAP/POP3/SMTP 代理服务器 nginx特性: 基本功能: 1.能够实现服务于静态文件,也就是静态资源的web服务器,能自动缓存打开的文件描述符: 2.反向代理服务器,能够实现简单的负载均衡和冗余 3.能够支持FastCGI协议 4.有模块化话功能,但非DSO(动态装卸载)机制,支持多种过滤器gzip,SSI和完成图像大小调整等 5.支持SSL功能 扩展功能: 1.能够基于名称和IP做虚拟主机 2.支持keepalive 3.支持平滑的

【初学菜鸟作-nginx网站服务器的安装以及基本使用】

nginx网站服务的安装与配置 1.编写脚本,以安装nginx 编写脚本前须知nginx的安装环境 此案例提供两个版本的nginx(nginx-0.8.55.tar.gz  nginx-1.0.5.tar.gz) 其为源码包,需要gcc环境(gcc gcc-c++ make)以及pcrepcre-devel  ssl openssl 在root家目录下新建脚本文件install.sh [[email protected] ~]# cat install.sh   #!/bin/bash   se

FastDFS_v5.05+nginx+cache集群安装配置手册

转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.FastDFS简单介绍 FastDFS是由淘宝的余庆先生所开发,是一个轻量级.高性能的开源分布式文件系统,用纯C语言开发,包括文件存储.文件同步.文件访问(上传.下载).存取负载均衡.在线扩容.相同内容只存储一份等功能,适合有大容量存储需求的应用或系统.做分布式系统开发时,其中要解决的一个问题就是图片.音视频.文件共享的问题,分布式文件系统正好可以解决这个需求.同类的分布式文件系统有谷歌的GFS.HDF

Nginx单向认证的安装配置

Nginx单向认证的安装配置 首先系统要已经安装了openssl,以下是使用openssl安装配置单向认证的执行步骤与脚本: #-------------------------------------------------------- # 单向认证,就是传输的数据加密过了,但是不会校验客户端的来源 # 单项SSL连接,也就是只是客户端验证服务器证书 #-------------------------------------------------------- #创建存储路径 rm -r

Nginx网站服务器的安装及LEMP平台应用

1,  编译及安装Nginx1)       安装支持软件[[email protected] ~]# yum -y install pcre-devel zlib-devel注意:安装pcre是为了使nginx支持HTTP rewrite模块.2)创建程序用户和程序组[[email protected] ~]# useradd -M -s /sbin/nologin nginx3)编译安装Nginx[[email protected] ~]# cd /aaa/[[email protected

Nginx之一:编译安装及基础应用

一.Nginx简介 Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器.它运行在UNIX,GNU/Linux,BSD各种版本,Mac OS X,Solaris和Windows.据统计,6%的网站使用Nginx Web服务器.Nginx是少数能处理C10K问题的服务器之一.跟传统的服务器不同,Nginx不依赖线程来处理请求.相反,它使用了更多的可扩展的事件驱动(异步)架构.Nginx为一些高流量的网站提供动力,比如WordPress,人人网,腾讯,网易

Nginx学习指南之安装与配置

一.简介 Nginx [engine x]是Igor Sysoev编写的一个HTTP和反向代理服务器,另外它可以作为邮件代理服务器.Nginx已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括Yandex,Mail.Ru.VKontakte,以及Rambler,在国内使用Nginx作为Web Server,Cache Server,Proxy Server网站包括百度,新浪,腾讯,网易,机锋网等,根据Netcraft统计,在2012年8月份,世界上最繁忙的网站中有11.48使用Ngin