nginx实践(一)、安装和部署

来源:互联网 发布:达内软件科技 编辑:程序博客网 时间:2024/06/05 20:14

很长一段时间没有更新blog,因为这一段时间,都在研究一个实时事件处理应用,计划把该实时事件处理服务,修改为分布式服务。相关内容以后再与大家汇报。

好了,因为工作缘故,要分析一个使用nginx的应用,所以从本节开始,介绍一下nginx的相关实践内容。

一、本节目标

1、实践nginx的安装和部署、配置

2、验证nginx的反向代理功能

二、环境准备

   1、准备1台虚拟机centos6.5

   2、分别部署2套tomcat(说明:做反向代理只用一个,做负载均衡才需要2套)

   3、下载nginx 稳定版 ,下载地址http://nginx.org/

下载完成后,将下载的文件nginx-1.12.0.tar.gz上传到虚拟机上。

三、安装、部署、配置


我是放在/home/nmc/soft/nginx目录(这是nginx软件目录,不是最终部署目录),进入目录后,执行如下命令

       gzip -d  nginx-1.12.0.tar.gz

       tar  -vxf   nginx-1.12.0.tar

       进入nginx-1.12.0 目录,解压后的目录结构如下:


   下面,我们需要将nginx 进行编译,因为nginx 是用c开发的,所以一般我们需要用 config,make ,make  install 方式。

   在nginx 软件目录里面,执行 ./configure --prefix=/home/nmc/dev/nginx   

   这里的目录是最终要部署的目录。执行的时候,如果报告如下error: ./configure: error: the HTTP rewrite module requires the PCRE library.

  注:  HTTP rewrite  模块说明: 【Rewrite是一种服务器的重写技术,它可以使得服务器可以支持 URL 重写,是一种最新流行的服务器技术。它还可以实现限制特定IP访问网站的功能。很多情况下,某个 IP 的访问很容易造成 CPU 100% (比如 某些搜索引擎的固定抓取,别人大量的采集站点),这个时候我们就要利用一些有效的手段封掉对方的 IP,让他无法消耗服务器的资源,封 IP 的方法有很多种,如果你的 Web 服务器安装了 Rewrite 模块的话,也可以试试利用 Rewrite 规则封掉对方的 IP

   还是挺重要的,所以还是装吧。用yum 方式安装,执行如下命令:

  yum -y install pcre-devel

  安装完成后,再次运行config,成功后显示如下内容:

Configuration summary  + using system PCRE library  + OpenSSL library is not used  + using system zlib library  nginx path prefix: "/home/nmc/dev/nginx"  nginx binary file: "/home/nmc/dev/nginx/sbin/nginx"  nginx modules path: "/home/nmc/dev/nginx/modules"  nginx configuration prefix: "/home/nmc/dev/nginx/conf"  nginx configuration file: "/home/nmc/dev/nginx/conf/nginx.conf"  nginx pid file: "/home/nmc/dev/nginx/logs/nginx.pid"  nginx error log file: "/home/nmc/dev/nginx/logs/error.log"  nginx http access log file: "/home/nmc/dev/nginx/logs/access.log"  nginx http client request body temporary files: "client_body_temp"  nginx http proxy temporary files: "proxy_temp"  nginx http fastcgi temporary files: "fastcgi_temp"  nginx http uwsgi temporary files: "uwsgi_temp"  nginx http scgi temporary files: "scgi_temp"

   接下来,我们运行:

   make

   make install

   make的时候,会比较长时间

   完成后,我们去部署目录(/home/nmc/dev/nginx)其目录结构如下:

    

[root@cwqsolo nginx]# ls -ltotal 16drwxr-xr-x 2 root root 4096 Apr 21 17:50 confdrwxr-xr-x 2 root root 4096 Apr 21 17:50 htmldrwxr-xr-x 2 root root 4096 Apr 21 17:50 logsdrwxr-xr-x 2 root root 4096 Apr 21 17:50 sbin[root@cwqsolo nginx]# pwd

  

  四、验证

    1、首先验证nginx是否能正常工作

    进入/home/nmc/dev/nginx/sbin 目录, 运行 ./nginx  启动

   如果启动报错比如端口被占用,那么我们需要修改一下nginx 的端口

[root@cwqsolo sbin]# ./nginxnginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] still could not bind()

    通过netstat  -ltunp  命令可以查看80 端口是被什么占用,本机因为开启了httpd 服务,所以已经用80端口,修改nginx配置文件,更改端口

   

   进入conf 目录,修改nginx.conf 的server 中端口 =》listen       8080;

   修改完成后,重启nginx,正常不报告任何信息,就是启动成功了,下面我们通过url    http://192.168.136.144:8080  来查看。

   ip是nginx服务所在ip,如果在nginx本机上也可用localhost 来代替ip。

   【坑:】

   如果启动后,访问url出现403 错误
 

  可以查看一下日志。  nginx/logs目录下的err 日志

   

136.1, server: localhost, request: "GET / HTTP/1.1", host: "192.168.136.144:8080"2017/04/21 18:09:46 [error] 8000#0: *13 "/home/nmc/dev/nginx/html/index.html" is forbidden (13: Permission denied), client: 192.168.136.1, server: localhost, request: "GET / HTTP/1.1", host: "192.168.136.144:8080"2017/04/21 18:10:59 [error] 8000#0: *14 "/home/nmc/dev/nginx/html/index.html" is forbidden (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost:8080"
    根据日志提示,权限拒绝,我们看一下nginx目录

    

    发现很多目录是nobody 账户,查了一下,是因为nginx启动work进程是 nobody账号,而我是在用root账号部署和启动的,所以nobody进程(nginx work)无法访问 nginx下的几个目录如html。知道原因,好,有2个办法: 

    办法1: 设定启动work的 用户为root

    办法2: 修改nginx的进程和用户

    我采用的是办法2, 先用chown -R nmc:nmc  nginx 命令修改nginx目录的用户和用户组,然后用nmc用户启动nginx进程,这样就解决了。

解决后访问url,显示如下页面

     2、 验证反向代理功能

    这里验证,需要用到前面提的tomcat应用,当然也可以用其他提供http服务的应用。

扩展阅读】代理与方向代理:通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。

   下面是一个原理示意图,注意图中网络云的位置,代表了不同模型中屏蔽的信息的不同。


  验证方向代理的步骤:首先启动一个http服务,如tomcat,配置nginx中的反向代理,重启nginx,通过nginx暴露的url访问。

1)首先启动准备好的tomcat ,在本例中是 http://192.168.136.144:9080/  页面如下所示:


     2) 修改nginx的配置,加入下面标红的内容

    

http {    include       mime.types;    default_type  application/octet-stream;    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_log  logs/access.log  main;    sendfile        on;    #tcp_nopush     on;    #keepalive_timeout  0;    keepalive_timeout  65;    upstream mysvr {         server 192.168.136.144:9080 max_fails=3 fail_timeout=30s;    }    #gzip  on;    server {        listen       8080;        server_name  localhost;        #charset koi8-r;        #access_log  logs/host.access.log  main;        location / {            proxy_pass  http://mysvr;            root   html;            index  index.html index.htm;        }        #error_page  404              /404.html;
       上面配置文件中:

upstream mysvr {         server 192.168.136.144:9080 max_fails=3 fail_timeout=30s;    }
       这里配置了一个服务器,也就是被代理的服务

      proxy_pass http://mysvr;

      这里将对nginx的访问指向了被代理的url服务。

      修改nginx.conf 后,可以通过如下命令使配置生效:   ./nginx  -s  reload

      执行后,重新访问如下url       http://192.168.136.144:8080  发现已经指向被代理的url   http://192.168.136.144:9080 端口


 



   

   

0 0