编译安装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"方式进行安装;
编译三部曲:
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 方法:
例:
基于虚拟主机配置Nginx:
启动Nginx:
测试方法:
做一台DNS服务器,建立一条两条A记录,分别指向这两台虚拟主机,或直接修改客户端的hosts文件,将这两个域名与IP的对应关系写在其中即可;
OK,两个虚拟主机都测试成功;
基于端口:
此时在用浏览器加上端口访问即可;
基于Openssl 服务实现 https:
环境,CA及与Nginx在同一台机器上;
1、为CA生成自签证书:
2、为Nginx生成私钥,并申请证书:
3、签署证书:
4、更改Nginx配置文件,支持https:(默认Nginx的SSL配置文件是注释的,启用起来即可)
5、导出CA证书到客户机:
将刚刚为CA自签的证书cacert.pem 倒出到客户机,并重命名为 cacert.crt,双击倒入到受信任的根证书颁发机构:
6、验证https工作是否正常:
OK,Nginx服务启用https功能,到此处即完成,后缀还会发布Nginx反向代理,笔者水平有限,如有疏漏不妥之处,还请不吝赐教!
本文出自 “那些颠沛留离的日子。” 博客,请务必保留此出处http://linuxzj.blog.51cto.com/6160158/1596956
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
相关文章推荐
- Nginx基于IP,端口,域名配置虚拟主机
- Linux实战第八篇:CentOS7.3下Nginx虚拟主机配置实战(基于端口)
- nginx基于端口的虚拟主机实战
- 在Red Hat Linux5下构建LAMP网站服务平台之编译安装Apache与配置基于域名的虚拟Web主机
- nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root、alias、index配置
- 源码编译安装LNMP环境及配置基于域名访问的多虚拟主机
- nginx配置基于端口和基于IP的虚拟主机
- 编译安装Nginx实现网络访问多虚拟主机(wordpress+phpmyadmin)
- 在RHEL5下构建LAMP网站服务平台之编译安装Apache与配置基于域名的虚拟Web主机
- 源码编译安装LAMP环境及配置基于域名访问的多虚拟主机
- linux下nginx实现虚拟主机(3种方法:基于域名、基于端口、基于ip地址)
- nginx基于端口的虚拟主机:
- 编译安装Apache发布多个虚拟主机
- apache 基于域名,IP,端口 3种方式的虚拟主机
- 构建LAMP平台利用虚拟主机实现提供discuz论坛、基于SSL安装phpMyAdmin、安装wordpress
- 编写安装配置httpd服务基于域名的虚拟主机脚本
- 基于nginx的虚拟主机的配置
- Nginx配置之基于域名的虚拟主机
- apache基于域名和端口的虚拟主机
- Apache基于IP与端口建立虚拟主机