【运维】Windows环境下配置Nginx

作者: 吾非言 | 来源:发表于2017-10-21 17:39 被阅读252次

作者:邹峰立,微博:zrunker,邮箱:zrunker@yahoo.com,微信公众号:书客创作,个人平台:www.ibooker.cc

本文选自书客创作平台第66篇文章。阅读原文

书客创作

Nginx是什么?

百科上是这样解释的:Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。

反向代理?该如何理解呢?

举一个很明显的例子,在进行开发的时候,通常会把项目(ibooker)发布到tomcat,假如项目首页是index.jsp,tomcat端口号是8080,那么要访问tomcat中ibooker项目首页,就要在浏览器上输入:http://localhost:8080/ibooker/index.jsp

但是一般网站访问都是没有端口号,类似:http://localhost/直接通过域名访问首页。

这样问题就来了,http协议访问时80端口,tomcat访问时8080端口,怎么才能做到不输入端口号就能访问tomcat上发布的项目呢?这个问题的关键点就在80端口,如果在访问80端口的时候就能够直接去访问8080端口不就可以实现了吗,那么如何监听80端口呢?

答案就是Nginx,Nginx作为反向代理就是把所有请求交给它来处理,之后转发出去。

那么具体的该如何实现呢?

1、安装

去Nginx官网下载相应的安装文件,本例中是Windows环境,下载的是nginx-1.12.1.zip文件。在Windows下安装Nginx其实非常简单,只需要把zip文件解压即可。

Nginx文件目录结构图

Nginx文件目录结构图

其中conf是用来放Nginx的配置文件,logs日志文件,nginx.exe是Nginx的应用程序可以通过该文件直接启动或操作Nginx。

2、配置

Nginx安装完后,就是配置文件了。nginx.conf为Nginx的基本配置文件,它在conf文件夹下。

nginx.conf有几个重要的参数要注意:

listen:表示当前的代理服务器监听的端口,默认的是监听80端口。注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。

server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地,这时是直接到nginx文件夹内。

location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里。

root:里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对我们之后的静态文件伺服很有用。

index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。

在这里,最关键的就是对http的相关配置:

#Nginx所用用户和组,window下不指定
#user  nobody;
#工作的子进程数量(通常等于CPU数量或者2倍于CPU)
worker_processes  2;
#错误日志存放路径
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#指定pid存放文件
pid        logs/nginx.pid;
events {
    #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue,window下不指定。
    #use epoll;
    #允许最大连接数
    worker_connections  2048;
}
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"';
    #长连接超时时间,单位是秒
    keepalive_timeout  65;
    # 默认访问日志路径
    access_log     logs/access.log;
    #负载均衡相关配置
    client_header_timeout     3m;
    client_body_timeout     3m;
    send_timeout     3m;
    #上传文件大小限制
    client_header_buffer_size     1k;
    #设定请求缓
    large_client_header_buffers     4 4k;
    #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    sendfile        on;
    #防止网络阻塞
    tcp_nopush     on;
    #防止网络阻塞
    tcp_nodelay     on;
    #启动数据压缩
    include gzip.conf;
    #以下是反向代理的配置,可选。
    include   proxy.conf;
    #upstream localhost {
        #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
        #    server localhost:8080 weight=1;
    #}
    server {
        #监听端口
        listen       80;
        #域名可以有多个,用空格隔开
        server_name  localhost;
        #默认编码
        charset utf-8;
        #访问文件根目录
        root E:/MyEclipse/apache-tomcat-7.0.72-windows-x64/apache-tomcat-7.0.72/webapps;
        #404页面设置
        error_page  404              /404.html;
        #50X页面设置
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ ^/(WEB-INF)/ {
           deny   all;
        }
        #此部分主要是dwr的js有写是服务器动态生成的,不能交给nginx处理,这样会出现404,需要单独处理并交给服务器处理。
        location /ibooker/dwr/ {
           proxy_pass   http://localhost:8080/ibooker/dwr/;
        }
        #本地动静分离反向代理配置(静)
        #其他的静态文件处理dwr的都交给nginx处理
        location ~ \.(htm|html|gif|jpg|jpeg|png|ico|rar|css|js|zip|txt|flv|swf|doc|ppt|xls|pdf)$ {
           access_log   off;
           expires   24h;
        }
        #本地动静分离反向代理配置(动)
        location /ibooker/ {
           proxy_connect_timeout   3;
           proxy_send_timeout   30;
           proxy_read_timeout   30;
           proxy_pass   http://localhost:8080/ibooker/;
        }
        #访问根目录下的路径也就是webapp,默认跳转到ibooker项目的路径下,也就是跳转到上面的路径
        location / {
           rewrite (.*)$ /ibooker$1 permanent;
        }
    }
}

在上面的配置文件中提到gzip.conf和proxy.conf。所以要将这两个文件添加到conf文件夹下。

gzip.conf:数据压缩

#开启gzip压缩输出
gzip              on;
 #最小压缩文件大小
gzip_min_length   1024;
#压缩缓冲区
gzip_buffers      4 8k;
#压缩等级
gzip_comp_level   9;
前端是squid的情况下要加此参数,否则squid上不缓存gzip文件
gzip_proxied      any;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_types        application/xml application/javascript application/x-javascript application/atom+xml application/rss+xml;
gzip_types        text/css text/javascript text/js text/plain text/xml;

proxy.conf:反向代理的配置

proxy_redirect          off;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
#允许客户端请求的最大单文件字节数
client_max_body_size    10m;
#缓冲区代理缓冲用户端请求的最大字节数,
client_body_buffer_size 128k;
 #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout   300;
#后端服务器数据回传时间(代理发送超时)
proxy_send_timeout      300;
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout      300;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size       4k;
#proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_buffers           4 32k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;

到这里可以说基本上都已经完成了,最后通过CMD命令启动Nginx即可。

注意:Nginx的相关命令,需要进入Nginx的安装目录才行,命令是通过nginx.exe来执行。
开启Nginx:

start nginx

关闭Nginx:

nginx -s stop
或
nginx -s quit

重新载入Nginx:

nginx -s reload

通常在Windows环境下使用Nginx可能会发生一些小的错误:

1、路径错误

例如:当设置root C:\Tomcat\Tomcat 8.5\webapps。启动Nginx时候会报如下错误:

nginx: [emerg] invalid number of arguments in "root" directive in e/nginx1.12.1/conf/nginx.conf:41

报这种错误的原因是:文件路径不能带空格,所以可以改成root "C:\Tomcat\Tomcat 8.5\webapps"。添加双引号。

这时候再次启动还是会报同样的错误:

这次报错的原因是:文件路径中的\错误,所以要改成root "C:/Tomcat/Tomcat 8.5/webapps"。这样再次启动就不会报错了。

2、创建文件失败

例如:当在nginx.conf文件中设置pid logs/nginx.pid;启动Nginx,这时候可能会报如下错误:

nginx: [error] CreateFile() "E:\nginx\nginx-1.12.1/logs/nginx.pid" failed

这时候可以通过手动创建文件的方式解决这个问题:

CMD输入:nginx -c conf/nginx.conf运行即可。

解决了所有问题之后,开启Nginx和tomcat,在浏览器上输入http://localhost/,这时候你会发现网页会自动跳转到http://localhost/ibooker/

那如何自动访问到index.jsp文件呢?

其实我们只需要在工程文件中找到web.xml文件,设置:

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

之后再向浏览器输入http://localhost/,此时就会自动跳转到index.jsp页面。

注意:Nginx在linux系统下才能发挥出高性能。

Github地址
阅读原文


微信公众号:书客创作

相关文章

  • 【运维】Windows环境下配置Nginx

    作者:邹峰立,微博:zrunker,邮箱:zrunker@yahoo.com,微信公众号:书客创作,个人平台:ww...

  • nginx tomcat 搭建web

    本文实验环境在windows下,旨在快速掌握nginx基本使用配置 1启动nginx 进入nginx 目录: 配置...

  • nginx反向代理tomcat

    环境介绍 在linux虚拟机下安装nginx和tomcat,在windows下通过浏览器访问 nginx配置 在/...

  • Windows环境下Nginx+Lua+Redis实现灰度发布

    Windows环境下Nginx+Lua+Redis实现灰度发布 1.配置nginx.conf文件 2.lua脚本 ...

  • The Little Schemer-CHP1

    在 Windows 下配置环境 在 http://racket-lang.org/ 下载 Racket 并安装 运...

  • nginx使用

    Nginx在windows下的安装、运行,以及配置文件讲解 安装Nginx(windows版) 进入Nginx官网...

  • Nginx 运维(安装与使用)

    Nginx 运维(安装与使用) 普通安装 Windows安装 (1)进入官方下载地址,选择合适版本(nginx/W...

  • 【运维】nginx 配置

    NGINX和NGINX Plus同其他服务一样,他们都是使用基于文本的特定格式配置文件。这个配置文件默认为ngin...

  • [运维] nginx 配置

    https 双向认证 部分 location 单向认证 ssl_verify_client optional; i...

  • vue+nginx配置

    今天把本地的vue打包出来的dist文件配置到测试环境上了,运维用的是nginx。 首先, npm run bui...

网友评论

    本文标题:【运维】Windows环境下配置Nginx

    本文链接:https://www.haomeiwen.com/subject/zqziuxtx.html