您的位置:首页 > 运维架构 > Nginx

编译安装Nginx基于虚拟主机、端口,Openssl

2014-12-28 17:20 603 查看
What is Nginx?

Nginx与Apach类似,是一款高性能的HTTP和反向代理服务器软件,由俄罗斯程序员 lgor Sysoev开发,可以运行在 UNIX、GNU\LINUX、BSD、Mac OS X、Solaris及Microsoft Windwos等操作系统中;

What 使用 Nginx?

Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用语言接口,如PHP、Perl、Python等,同时还支持正向和反向代理、虚拟主机URL重写、压缩传输、SSL 加密传输等,它们之间最大差别是Apache所有模块都支持动、静态编译,而Nginx模块都是静态编译的,同时 Apache对Fcgi支持不太好,而Nginx对Fcgi支持非常好,在处理连接方式上,Nginx支持epoll,而Apache却不支持,在空间使用上,Nginx安装包仅有几百K,与Nginx比起来,Apache显得非常庞大;

Nginx模块与工作原理:

Nginx由内核与模块组成,内核的设计非常微小简洁,完成的工作非常简单,仅仅通过查找配置文件将客户端请求映射到一个 location block (location 是Nginx配置中的一个指令,用于URL匹配),location中所配置的每个指令将会启动不同的模块完成相应的工作;

Nginx模块从结构上分为核心模块、基础模块和第三方模块,HTTP模块、EVENT模块和MAIL模块等属于核心模块,HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite属于基础模块,其它任何用户根据自己需要开发的模块都属于第三方模块,Nginx有着众多的模块,所以变得特别强大;

Nginx模块从功能上分为三类:

Handlers(处理器模块)此类模块直接处理请求,并进行输出内容和修改headers信息等操作,Handlers处理模块一般只能有一个;

Filter(过滤器模块)此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出

Proxies(代理类模块)此类模块是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能;

Nginx分为单工作进程和多工作进程两种模式:

单工作进程模式下,除主进程外,还有一个工作进程,工作进程是单线程的;
多工作进程模式下,每个工作进程包含多个线程,Nginx默认为单工作进程模式;

Nginx的模块直接被编译进Nginx,因此属于静态编译方式,启动Nginx后,Nginx的模块被自动加载,不像Apache,首先将模块编译为一个so文件,然后在配置文件中指定是否加载;

Nginx官方站点:http://nginx.org/
Nginx分为三个版本:稳定版、开发版与历史稳定版;

次版本号为偶数即为稳定版,奇数为开发版,稳定版都是经过了生产环境的严格测试,因此建议生产环境中,选择次版本号为偶数的稳定版;

# 目前最新版本为 Nginx 1.7.9;

# 此处以1.6.2为示例,进行编译:

Nginx 6.2官方下载链接:
http://nginx.org/download/nginx-1.6.2.tar.gz

Nginx安装过程非常简单,默认情况下,编译安装Nginx包含了大部分可用模块,可通过"./configure --help" 选项查看 Nginx编译时可以接受的选项,例如不需要 http_ssi模块,可通过 "--without-http_ssi_module" 方式关闭,同理如果需要 "http_perl"模块,可通过 "--with-http_perl_module"方式进行安装;

tar  zvf  nginx-1.6.2.tar.gz
cd  nginx-1.6.2
./configure  --prefix=/usr/local/nginx  --conf-path=/etc/nginx/nginx.conf  --user=nginx   --group=nginx   --error-log-path=/var/log/nginx/error.log   --http-log-path=/var/log/nginx/access.log   --pid-path=/var/run/nginx/nginx.pid   --lock-path=/var/lock/nginx.lock   --with-http_ssl_module   --with-http_stub_status_module   --with-http_gzip_static_module   --with-http_flv_module   --with-http_mp4_module   --http-client-body-temp-path=/var/tmp/nginx/client   --http-proxy-temp-path=/var/tmp/nginx/proxy   --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi

make

make install


编译三部曲:
1、configure命令是用来检测你的安装平台的目标特征的。它定义了系统的各个方面,包括nginx的被允许使用的连接处理的方法,比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本,执行结束时,它会创建一个Makefile文件。nginx的configure命令支持以下参数:2、make用来编译,它从Makefile中读取指令,然后编译。3、make install用来安装编译后的程序,它从Makefile中读取指令,并安装到指定的位置。
--prefix=path # 指定Nginx 安装位置,默认使用 /usr/local/nginx。
--sbin-path=path # 设置 nginx可执行文件路径,默认为 prefix/sbin/nginx。
--conf-path=path # 指定Nginx 配置文件存放路径,nginx允许使用不同的配置文件启动,通过 nginx -c选项,默认配置文件位置为 prefix/conf/nginx.conf;
--pid-path=path/name.pid # 设置 nginx.pid文件位置,安装完成后可在nginx.conf配置文件中更改位置,默认位置为 prefix/logs/nginx.pid;
--error-log-path=path/name.log # 设置错误日志位置及名称,安装完成后可在nginx.conf配置文件中更改位置,默认位置为 prefix/logs/error.log;
--http-log-path=path/name.log # http访问日志路径,安装后可在nginx.conf配置文件中更改位置,默认位置为 prefix/logs/access.log;
--user=name # 设置 nginx工作进程的用户,安装完成后可在Nginx.conf配置文件中用user指令更改,默认用户为 nobody;
--group=name # 设置nginx工作进程的用户组,安装后可在Nginx.conf配置文件中用user 指令更改;
--lock-path=path/name.lock # 指定锁文件位置
--with-http_ssl_module # 支持https协议,默认不会编被编译,编译时需要安装 openssl-devel
--with-http_stub_status_module # http状态模块,默认不会被编译,可通过网页输出http状态
--with-http_gzip_static_module # 启用 gzip 模块用于网页在传输时压缩
--with-http_flv_module # 启用 flv 流媒体模块
--with-http_mp4_module # 启用 httpd_mp4 mp4格式流媒体模块
--http-client-body-temp-path= # body 的临时存放路径
--http-proxy-temp-path= # proxy 临时存放路径
--http-fastcgi-temp-path= # fsstcgi 临时存放路径

Nginx命令:
/usr/local/sbin/nginx 启动Nginx服务

/usr/local/sbin/nginx -t 测试配置文件语法

/usr/local/sbin/gginx -t -c /path/some Nginx支持使用不同的配置文件启动 -c 指定不同的配置文件

/usr/local/sbin/nginx -v 查看 Nginx 版本

/usr/local/sbin/nginx -V 显示Nginx版本与编译时都用了哪些额外选项

Nginx对进程的控制能力非常强大,可通过信号指令控制进程:
常用的信号 :

HUP:表示重新加载配置,也就是关闭原有进程,并开启新的进程;此操作不会中断用户的访问请求,因此可以用此信号平滑重启Nginx;

USR1:用于Nginx日志切换,重新打开一个日志文件,例如每天要生成一个新日志文件时,可用这个信号来控制;

USR2:用于平滑升级可执行程序

QUIT:处理完所有请求以后,关闭该进程

获取Nginx PID 方法:

ps -ef |grep "nginx:master process" |grep -v "grep" | awk -F' ' '{print $2} # 获取Nginx所有进程的PID;

cat  /usr/local/logs/nginx.pid   # 如果编译安装时没有指定Pid参数,默认在nginx程序所在目录/logs/nginx.pid

例:
kill  -HUP  `cat /usr/local/nginx/logs/nginx.pid`  # 此处使用了命令引用,先获取pid,在向kill 向 nginx进程传递 HUP 信号;


基于虚拟主机配置Nginx:

vim /etc/nginx/nginx.conf

server {
listen 172.16.4.33:80;
server_name www.nginx.com;
root /www;
location /www {
index index.html index.htm;
}
}

server {
listen 172.16.4.33:80;
server_name www.domain.com;
root /qqq
location /qqq {
index  index.html index.htm;
}
}
准备主页文件:
mkdir /www  /qqq
echo "Welcome to nginx. >  /www/index.html
echo "Welcome to domian. > /qqq/index.html


启动Nginx:
/usr/local/nginx/sbin/nginx
# 此时即定义了两个虚拟主机,关于配置文件含义在另一篇博客中有详解,此处就不在做介绍;

测试方法:
做一台DNS服务器,建立一条两条A记录,分别指向这两台虚拟主机,或直接修改客户端的hosts文件,将这两个域名与IP的对应关系写在其中即可;












OK,两个虚拟主机都测试成功;

基于端口:

vim /etc/nginx/nginx.conf

server {
listen 172.16.4.33:888;
server_name www.nginx.com;
root /www;
location /www {
index index.html index.htm;
}
}

server {
listen 172.16.4.33:999;
server_name www.nginx.com;
root /qqq
location /qqq {
index  index.html index.htm;
}
}



此时在用浏览器加上端口访问即可;

基于Openssl 服务实现 https:
环境,CA及与Nginx在同一台机器上;

1、为CA生成自签证书:
cd /etc/pki/CA
(umask 077;openssl genrsa -out private/cakey.pem 2048)
[root@bogon CA]# openssl req -new -x509 -key private/cakey.pem -days 3655 -out cacert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:MageEdu
Organizational Unit Name (eg, section) []:tech
Common Name (eg, your name or your server's hostname) []:example.com
Email Address []:mail@example.com

[root@bogon CA]# touch {index.txt,serial}
[root@bogon CA]# echo 01 > serial

2、为Nginx生成私钥,并申请证书:

cd /etc/nginx/
(umask 077;openssl genrsa -out nginx.key 2048)
[root@bogon nginx]# openssl req -new -key nginx.key -out nginx.csr -days 365
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:MageEdu
Organizational Unit Name (eg, section) []:tech
Common Name (eg, your name or your server's hostname) []:nginx.com
Email Address []:mail@nginx.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:


3、签署证书:
[root@bogon nginx]# openssl ca -in nginx.csr -out nginx.crt -days 365


4、更改Nginx配置文件,支持https:(默认Nginx的SSL配置文件是注释的,启用起来即可)

server {
listen       443 ssl;
server_name  www.nginx.com;
ssl_certificate      nginx.crt;
ssl_certificate_key  nginx.key;
ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;
ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on;
location / {
root   /www;
index  index.html index.htm;
}
}
killall nginx
/usr/local/nginx/sbin/nginx




5、导出CA证书到客户机:
将刚刚为CA自签的证书cacert.pem 倒出到客户机,并重命名为 cacert.crt,双击倒入到受信任的根证书颁发机构:





6、验证https工作是否正常:




OK,Nginx服务启用https功能,到此处即完成,后缀还会发布Nginx反向代理,笔者水平有限,如有疏漏不妥之处,还请不吝赐教!
本文出自 “那些颠沛留离的日子。” 博客,请务必保留此出处http://linuxzj.blog.51cto.com/6160158/1596956
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: