nginx入门

一、安装nginx

1、下载nginx

http://nginx.org/download/nginx-1.8.1.tar.gz
上传到Linux服务器,我这里是上传到/usr/tool/目录下
进入tool文件夹下,解压上传的nginx压缩包

[root@localhost /]# cd /usr/tool/
[root@localhost tool]# tar -zxvf nginx-1.8.1.tar.gz

2、准备环境

需要安装gcc环境和相关第三方开发包,执行如下命令

[root@localhost tool]#yum -y install gcc-c++
[root@localhost tool]#yum install -y pcre pcre-devel
[root@localhost tool]#yum install -y zlib zlib-devel
[root@localhost tool]#yum install -y openssl openssl-devel

命令解释
yum -y install gcc-c++
需要安装gcc的环境。

yum install -y pcre pcre-devel
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。

yum install -y zlib zlib-devel
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

yum install -y openssl openssl-devel
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

3、创建目录

需要在/var下创建temp及nginx目录

[root@localhost tool]#mkdir /var/temp/nginx/client -p

4、Nginx编译

[root@localhost /]# cd /usr/tool/nginx-1.8.1/
[root@localhost nginx-1.8.1]# ./configure
--prefix=/usr/tool/nginx
--pid-path=/var/run/nginx/nginx.pid
--lock-path=/var/lock/nginx.lock
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--with-http_gzip_static_module
--http-client-body-temp-path=/var/temp/nginx/client
--http-proxy-temp-path=/var/temp/nginx/proxy
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi
--http-scgi-temp-path=/var/temp/nginx/scgi

5、安装Nginx:

安装命令:make & make install

[root@localhost nginx-1.8.1]# make & make install

进入nginx目录,查看目录下有sbin文件夹,安装成功

[root@localhost nginx-1.8.1]# cd /usr/tool/nginx
[root@localhost nginx]# ll

6、启动nginx

进入sbin目录

[root@localhost sbin]# ./nginx

7、访问nginx

输入安装nginx的IP,默认端口为80

http://192.168.65.129/


image.png

如看到上图信息,nginx安装与启动成功

二、配置虚拟主机

nginx的配置文件在
/usr/tool/nginx-1.8.1/conf/nginx.conf

1、通过端口区分

1.1、配置文件修改如下

每个server监听1个端口
修改完成需要每次配置文件修改之后都需要重新加载配置文件,命令如下

[root@localhost nginx]# sbin/nginx -s reload

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

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;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
    server {
        listen       81;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html81;
            index  index.html index.htm;
        }
    }
}

1.2、复制文件夹用于81端口使用

[root@localhost nginx]# cp html html81 -r

修改html81目录下index.html内容来区分端口

2、通过域名区分

2.1、修改nginx的配置文件如下

修改完刷新文件

[root@localhost nginx]# sbin/nginx -s reload


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

    }

    server {
        listen       81;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html81;
            index  index.html index.htm;
        }

    }

    server {
        listen       80;
        server_name  www.test01.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   htmltest01;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  www.test02.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   htmltest02;
            index  index.html index.htm;
        }
    }
}

2.2、复制文件夹

复制文件夹后并修改里面的index.html文件夹做区分

[root@localhost nginx]# cp html htmltest01 -r
[root@localhost nginx]# cp html htmltest02 -r

2.3、修改本机hosts

windows的hosts的文件在
C:\Windows\System32\drivers\etc
增加内容如下,ip换成安装nginx机器的地址

192.168.65.129 www.test01.com
192.168.65.129 www.test02.com

2.4、浏览器访问

浏览器输入
http://www.test01.com/

image.png

浏览器输入
http://www.test02.com/

image.png

至此,通过端口和域名区分虚拟主机设置完成

三、nginx配置反向代理

1、安装2个Tomcat

我的Linux已经有1个Tomcat,复制2两份
分别修改端口为8080和80801
分别修改Tomcat下webapp目录下ROOT目录下的index.jsp以做区别
然后分别启动2个Tomcat

[root@localhost tomcat]# cp tomcat8 tomcat8-8080 -r
[root@localhost tomcat]# cp tomcat8 tomcat8-8081 -r

2、nginx配置文件如下

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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;

    #gzip  on;

   upstream tomcat8080 {
    server 192.168.65.129:8080;
    }
    server {
        listen       80;
        server_name  www.test01.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://tomcat8080;
            index  index.html index.htm;
        }
    }
    upstream tomcat8081 {
    server 192.168.65.129:8081;
    }
    server {
        listen       80;
        server_name  www.test02.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://tomcat8081;
            index  index.html index.htm;
        }
    }
}

3、浏览器访问

http://www.test01.com/

image.png

http://www.test02.com/

image.png

反向代理配置成功

四、nginx配置负载均衡

nginx默认的负载均衡的策略就是轮询的方式。
配置文件如下

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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;

    #gzip  on;

   upstream tomcat8080 {
    server 192.168.65.129:8080;
    server 192.168.65.129:8081;
    }
    server {
        listen       80;
        server_name  www.test01.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://tomcat8080;
            index  index.html index.htm;
        }
    }

}

第一次访问http://www.test01.com/

image.png

第二次访问http://www.test01.com/

image.png

至此,nginx的负载均衡配置完成

负载均衡的几种常用方式

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream tomcat8080 {
    server 192.168.65.129:8080;
    server 192.168.65.129:8081;
}

2、weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的 情况。

upstream tomcat8080 {
    server 192.168.65.129:8080 weight=3;
    server 192.168.65.129:8081 weight=7;
}

权重越高,在被访问的概率越大,如上例,分别是30%,70%。

3、ip_hash指令

上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream tomcat8080 {
    ip_hash;
    server 192.168.65.129:8080;
    server 192.168.65.129:8081;
}

4、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream tomcat8080 {
    server 192.168.65.129:8080;
    server 192.168.65.129:8081;;
    fair;
}

5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream tomcat8080 {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
}

每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

配置实例:

#user  nobody;
worker_processes  4;
events {
    # 最大并发数
    worker_connections  1024;
}
http{
    # 待选服务器列表
    upstream tomcat8080 {
        # ip_hash指令,将同一用户引入同一服务器。
        ip_hash;
        server 192.168.65.129:8080 fail_timeout=60s;
        server 192.168.65.129:8081;
        }

    server{
                # 监听端口
                listen 80;
                # 根目录下
                location / {
                    # 选择哪个服务器列表
                    proxy_pass http://tomcat8080 ;
                }

            }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容