Nginx环境搭建与搭建支持SSL的虚拟主机

一、Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

 

二、搭建简单的Nginx环境

 

搭建环境: Linux CentOS7

Nginx不支持yum安装,需要用到包:nginx-1.10.3.tar.gz  [下载地址:http://nginx.org/en/download.html]

依赖包: make gcc pcre-devel openssl-devel  

 

0.要做的事

在IP地址为192.168.4.5的主机上安装部署Nginx服务,并可以将Nginx服务器,要求编译时启用如下功能:

  • 支持SSL加密功能
  • 设置Nginx账户及组名称均为nginx
  • Nginx服务器升级到更高版本。

然后本机访问页面验证Nginx Web服务器:

  • 使用火狐浏览器访问
  • 使用curl访问

0.nginx常用模块

在源码包下输入./configure --help查看可用模块

ngx_http_core_module(核心模块,包含http、server_name、root等配置参数)

ngx_http_access_module(访问控制模块,包含allow和deny配置参数)

ngx_http_auth_basic_module(用户认证模块,包含auth_basic等配置参数)

ngx_http_charset_module(字符集模块,包含charset utf8等配置参数)

ngx_http_fastcgi_module(fastcgi模块,包含fastcgi_pass等配置参数)

ngx_http_gzip_module(压缩模块,包含gzip、gzip_type等配置参数)

ngx_http_limit_conn_module(限制并发量模块,包含limit_conn等参数)

ngx_http_log_module(日志模块,包含access_log等配置参数)

ngx_http_proxy_module(代理模块,包含proxy_pass等配置参数)

ngx_http_rewrite_module(地址重写模块,包含rewrite、break、last等配置参数)

ngx_http_ssl_module(加密模块,包含ssl_certificate、ssl_certificate_key等参数)

ngx_http_stub_status_module(状态模块,包含stub_status配置参数)

ngx_http_upstream_module(调度器模块,包含upstream、hash、ip_hash等配置参数)

ngx_stream_core_module(4层代理模块)

1.准备一台虚拟机

     在虚拟软件(KVM/VMwave)上安装一台Linux虚拟机,配置好虚拟网卡,设置ipv4地址,子网掩码(192.168.4.5/24)

 

2.安装Nginx软件包

  1. [root@proxy ~]# yum -y install gcc pcre-devel openssl-devel  make      //安装依赖包
  2. [root@proxy ~]# useradd -s /sbin/nologin nginx                     //添加一个专用用户,关于为何s
  3. [root@proxy ~]# tar -xf nginx-1.10.3.tar.gz
  4. [root@proxy ~]# cd nginx-1.10.3
  5. [root@proxy nginx-1.10.3]# ./configure \
  6. > --prefix=/usr/local/nginx \                //指定安装路径
  7. > --user=nginx \                            //指定用户
  8. > --group=nginx \                            //指定组
  9. > --with-http_ssl_module                        //开启SSL加密功能
  10. [root@proxy nginx-1.10.3]# make && make install    //编译并安装

    ls /usr/local/nginx/sbin/nginx          //查看是否有这个目录 有则安装成功

 补充(关于为何添加专用用户):

     按照最小特权原则,需要给Apache分配一个合适的权限,让其能够完成Web服务。
     最小特权原则是系统安全中最基本的原则之一,它限制了使用者对系统及数据进行存取所需要的最小权限,既保证了用户能够完成所操作的任务,同时也确保非法用户或异常操作所造成的损失最小。必须保证Apache使用一个专门的用户和用户组,不要使用系统预定义的账号。
     因为只有root用户可以运行Apache,DocumentRoot应该能够被管理Web站点内容的用户访问和使用Apache服务器的Apache用户和Apache用户组访问。所以,如果希望“cao”用户在Web站点发布内容,并且可以以httpd身份运行Apache服务器,通常可以将这个用户添加到apache组里.

    总言之,我们以root用户启用Apache,以apache用户或组身份使用apache,因为如果不将root与apache用户分离,如果使用者具备root权限,他就可以通过Apache软件的系统路径向上找到根,这是很危险的.

 

3.启动Nginx

  1. [root@proxy ~]# /usr/local/nginx/sbin/nginx                        //启动服务
  2. [root@proxy ~]# /usr/local/nginx/sbin/nginx -s stop            //关闭服务
  3. [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload        //重新加载配置文件
  4. [root@proxy ~]# /usr/local/nginx/sbin/nginx -V                //查看软件信息
  5. [root@proxy ~]# ln -s /usr/local/nginx/sbin/nginx /sbin/        //创建软链接,方便后期使用,输入nginx即可 

 

4.验证Nginx正在运行

netstat命令可以查看系统中启动的端口信息,该命令常用选项如下:

-a显示所有端口的信息

-n以数字格式显示端口号

-t显示TCP连接的端口

-u显示UDP连接的端口

-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口

-p显示监听端口的服务名称是什么(也就是程序名称)

   nginx服务默认通过TCP 80端口监听客户端请求,观察通过TCP 80是否在被nginx占用,如果你的服务器还有其他的使用80端口的服务,如httpd,你就要关闭httpd,关闭进程 kill all -9 httpd

  1. [root@proxy ~]# /usr/local/nginx/sbin/nginx           //启动nginx
  2. [root@proxy ~]# netstat -anptu | grep nginx           // 观察端口信息
  3. tcp        0        0 0.0.0.0:80        0.0.0.0:*        LISTEN        10441/nginx
  4. [root@proxy ~]# firefox localhost                          //用火狐启动,看到首页即为成功

 

三、用户认证

    如果限制客户机访问Nginx,可以在Nginx服务器上添加几个用户,当客户机访问的时候,通过输入用户名和密码访问Web网站内容.

    通过Nginx实现Web页面的认证,需要修改Nginx配置文件,在配置文件中添加auth语句实现用户认证。最后使用htpasswd命令创建用户及密码即可。

1.修改Nginx配置文件

  1. [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
  2. .. ..
  3. server {                                                         //打开配置文件后找到Server这一行,添加两条配置文件即可
  4. listen 80;
  5. server_name localhost;
  6. auth_basic "Input Password:";                        //认证提示符信息
  7. auth_basic_user_file "/usr/local/nginx/pass";        //认证的密码文件
  8. location / {
  9. root html;
  10. index index.html index.htm;
  11. }
  12. }

2.生成密码文件,创建用户及密码

  1. [root@proxy ~]# yum -y install httpd-tools                             //需要安装这个功tool工具,否则无法执行htpasswd命令
  2. [root@proxy ~]# htpasswd -c /usr/local/nginx/pass tom        //创建密码文件 -c 创建pass文件  tom为用户名
  3. New password:                                                                    //输入密码
  4. Re-type new password:
  5. Adding password for user tom
  6. [root@proxy ~]# htpasswd /usr/local/nginx/pass jerry    //追加用户,不使用-c选项,只要第一次创建pass之后都不需要-c选项
  7. New password:
  8. Re-type new password:
  9. Adding password for user jerry

3.重新加载Nginx

  1. [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload    //重新加载配置文件    
  2. #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
  3. #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory

4.测试

出现这个页面就代表成功了

 

四、配置Nginx虚拟主机

虚拟主机:

   虚拟主机(英语:virtual hosting)或称 共享主机(shared web hosting),又称虚拟服务器,是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。虚拟主机之间完全独立,并可由用户自行管理,虚拟并非指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统可以是基于服务器群,或者单个服务器。

    其技术是互联网服务器采用的节省服务器硬件成本的技术,虚拟主机技术主要应用于HTTP,FTP,EMAIL等多项服务,将一台服务器的某项或者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件资源。如果划分是系统级别的,则称为虚拟服务器。   

 费用低廉:

     相对于购买独立服务器,网站建设的费用大大降低,为普及中小型网站提供了极大便利。

     虚拟主机之间完全独立,在外界看来,每一台虚拟主机和一台独立的主机完全一样。由于多台虚拟主机共享一台真实主机的资源,每个虚拟主机用户承受的硬件费用、网络维护费用、通信线路的费用均大幅度降低。

     许多企业建立网站都采用这种方法,这样不仅大大节省了购买机器和租用专线的费用,网站服务器管理简单,诸如软件配置、防病毒、防攻击等安全措施都由专业服务商提供,大大简化了服务器管理的复杂性;同时也不必为使用和维护服务器的技术问题担心,更不必聘用专门的管理人员。

案例:

  1. 实现两个基于域名的虚拟主机,域名分别为www.a.com和www.b.com
  2. 对域名为www.a.com的站点进行用户认证,用户名称为tom,密码为123456

修改Nginx配置文件,添加server容器实现虚拟主机功能;对于需要进行用户认证的虚拟主机添加auth认证语句。

虚拟主机一般可用分为:基于域名、基于IP和基于端口的虚拟主机。在这里使用基于域名的虚拟主机.

 

1.修改配置文件

  1. [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf   
  2. .. ..
  3. server {
  4. listen 80;                                     //端口
  5. server_name www.a.com;                             //域名
  6. auth_basic "Input Password:";                        //认证提示符
  7. auth_basic_user_file "/usr/local/nginx/pass";        //认证密码文件
  8. location / {
  9. root html;                                    //指定网站根路径
  10. index index.html index.htm;
  11. }
  12.  
  13. }
  14. … …
  15. server {                                          //可以复制上一个配置文件的内容,做一些修改
  16. listen 80;                                        //端口
  17. server_name www.b.com;                             //域名
  18. location / {
  19. root www;                                 //指定网站根路径
  20. index index.html index.htm;
  21. }
  22. }

 

2.创建网站根目录及对应首页文件

  1. [root@proxy ~]# mkdir /usr/local/nginx/www                  //为www.b.com创建首页文件,www.a.com采用默认首页
  2. [root@proxy ~]# echo "This is www.b.com." > /usr/local/nginx/www/index.html

 

3.重新加载配置文件

  1. [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
  2. #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
  3. #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

 

4.添加一个本地域名解析信息

  1. [root@client ~]# vim /etc/hosts
  2. 192.168.4.5    www.a.com www.b.com

 

5.测试

    可以访问到主页即为测试成功

  1. [root@client ~]# firefox www.a.com
  2. [root@client ~]# firefox www.b.com

 

6.扩展

 基于端口和域名的配置:

  1. [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf   
  2. server {
  3. listen 8080;              //端口
  4. server_name www.a.com;         //域名
  5. ......
  6. }
  7. [root@proxy ~]# vim www.a.com:8080              //域名加端口访问

 基于端口和域名的配置:

  1. [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf   
  2. server {
  3. listen 8080;              //端口
  4. server_name 192.168.4.5;         //域名
  5. ......
  6. }
  7. [root@proxy ~]# curl 192.168.4.5:8080              //ip加端口访问

 

五、SSL虚拟主机

      SSL(Secure Socket Layer),为Netscape所研发,用以保障在Internet上数据传输的安全,利用数据加密(Encryption)技术,可确保数据在网络上的传输过程中不会被截取及窃听。一般通用的规格为40 bit的安全标准,美国则已推出128 bit的更高安全标准,但限制出境。只要3.0版本以上的I.E.或Netscape浏览器即可支持SSL。

      SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

       通俗来讲,不使用SSL协议就不安全,如果简单的进行文件传输,当访问者输入账号密码给服务器后一切都是明文显示的,如果这时候有人抓包就可以看到文件的内容,使用SSL协议将数据加密,即使被抓包了也看不到文件的具体内容,极大提高的了安全性,尤其是涉及金钱交易的网站.

案例:

  1. 域名为www.c.com
  2. 该站点通过https访问
  3. 通过私钥、证书对该站点所有数据加密

Nginx上的SSL协议:

    源码安装Nginx时必须使用--with-http_ssl_module参数(上文安装Nginx有提及),启用加密模块,对于需要进行SSL加密处理的站点添加ssl相关指令(设置网站需要的私钥和证书)。

加密算法:

加密算法一般分为对称算法、非对称算法、信息摘要。

对称算法有:AES、DES,主要应用在单机数据加密。

非对称算法有:RSA、DSA,主要应用在网络数据加密。

信息摘要:MD5、sha256,主要应用在数据完整性校验。

1.生成私钥与证书

  1. [root@proxy ~]# cd /usr/local/nginx/conf                                      #进入到目录下生成证书秘钥
  2. [root@proxy conf]# openssl genrsa > cert.key                            #生成私钥,文件名必须与配置文件内相同
  3. [root@proxy conf]# openssl req -new -x509 -key cert.key > cert.pem     #生成证书,需要输入信息
  4. Country Name (2 letter code) [XX]: china                      #国家
    State or Province Name (full name) []:hunan                 #省份
    Locality Name (eg, city) [Default City]:changsha           #城市
    Organization Name (eg, company) [Default Company Ltd]:xxx       #公司名
    Organizational Unit Name (eg, section) []:xxx                                 #单位名
    Common Name (eg, your name or your server's hostname) []:主机名            #主机名hostname查看
    Email Address []:xx@xx.com            #邮箱
     

2.修改Nginx配置文件

  1. [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf        //此文件下有下面的内容,默认是被注释掉了,去掉注释即可使用
  2. … …    
  3. server {
  4. listen 443 ssl;
  5. server_name          www.c.com;                       //修改一下域名
  6. ssl_certificate cert.pem;                                               #这里是证书文件
  7. ssl_certificate_key cert.key;                                         #这里是私钥文件
  8.  
  9. ssl_session_cache shared:SSL:1m;
  10. ssl_session_timeout 5m;
  11.  
  12. ssl_ciphers HIGH:!aNULL:!MD5;
  13. ssl_prefer_server_ciphers on;
  14.  
  15. location / {
  16. root html;                                                     #路径为/usr/local/nginx/html
  17. index index.html index.htm;
  18. }
  19. }

3.重新加载配置

  1. [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
  2. #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
  3. #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

4.添加域名解析

  1. [root@client ~]# vim /etc/hosts
  2. 192.168.4.5    www.c.com

5.测试

  1. [root@client ~]# firefox https://www.c.com            //信任证书后可以访问

    如果出现下面内容代表添加成功,点击Advanced,将此网址添加到信任列表,因为我们配置是本地SSL认证,而不是第三方认证,没有权威性,所以浏览器会弹出这样的提示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值