设为首页 收藏本站
查看: 1337|回复: 0

[经验分享] 编译安装Nginx基于虚拟主机、端口,Openssl

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-29 09:13:29 | 显示全部楼层 |阅读模式
                     
What is Nginx?

    Nginx与Apach类似,是一款高性能的HTTP和反向代理服务器软件,由俄罗斯程序员 lgor Sysoev开发,可以运行在 UNIX、GNULINUX、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
2
3
4
5
6
7
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 方法:

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




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




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






基于虚拟主机配置Nginx:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
                }
        }



准备主页文件:
1
2
3
    mkdir /www  /qqq
    echo "Welcome to nginx. >  /www/index.html
    echo "Welcome to domian. > /qqq/index.html




启动Nginx:
1
    /usr/local/nginx/sbin/nginx



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



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

    wKiom1SgEw3huGESAAG9bm9uOLs444.jpg

wKioL1SgE-CTzhVuAABXICvJA7U695.jpg
wKioL1SgE-Dh8eDDAABh0ZpfcNg703.jpg

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


基于端口:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
                }
        }



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



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

1、为CA生成自签证书:
1
2
    cd /etc/pki/CA
    (umask 077;openssl genrsa -out private/cakey.pem 2048)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[iyunv@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

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




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

1
2
  cd /etc/nginx/
    (umask 077;openssl genrsa -out nginx.key 2048)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[iyunv@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、签署证书:
1
  [iyunv@bogon nginx]# openssl ca -in nginx.csr -out nginx.crt -days 365




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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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



wKioL1SgHsXRmWkEAADHkFvIjnA697.jpg

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

         wKiom1SgHl2TAtvjAACBsxTf_io968.jpg

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


OK,Nginx服务启用https功能,到此处即完成;
                    


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-39518-1-1.html 上篇帖子: Nginx虚拟主机配置 下篇帖子: 实战Nginx(1)-虚拟主机基础配置 虚拟主机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表