Nginx的安装与使用入门

 Nginx官方网站    中文    英文

#这里好像没法搜;举几个例子:
resolver:位于  HTTP Core模块*
proxy_pass:位于  HTTP Proxy 模块

一、Nginx的安装

1、pcre依赖安装

官网下载:这里下载8.37版本,得到 pcre-8.37.tar.gz 上传到linux机器。

https://sourceforge.net/p/pcre/activity/?page=0&limit=100#5a81db4a5fcbc934232f5f55
#解压缩
tar zxvf pcre-8.37.tar.gz
cd pcre-8.37

#检查 与 安装
./configure
make && make install

#验证安装成功
pcre-config --version

如下图即为安装成功

2、openssl、zlib依赖安装

#执行yum一次性安装
yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

如果出现“Multilib version problems found.”的报错,就按照提示加上“--setopt=protected_multilib=false”。

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel --setopt=protected_multilib=false

没有明显报错应该就是ok的。

3、Nginx的安装与启动

(1) 官网 下载对应版本

#这里下载的是1.12.2版本
wget http://nginx.org/download/nginx-1.12.2.tar.gz 

#解压缩:
tar zxvf nginx-1.12.2.tar.gz   

#安装
cd nginx-1.12.2
./configure
make && make install

如下是正常安装:

 安装后在 /usr/local 路径下多了个 nginx 目录;

cd nginx  里面的sbin目录内有可执行文件nginx;这个就是启动nginx的可执行文件了。

(2)启动

(4)启动nginx
cd /usr/local/nginx/sbin
./nginx

4、验证安装成功

(1)查看进程是否ok,如下即为符合预期的结果。

 (2)浏览器访问验证

在nginx/conf/nginx.conf中可以看到其默认监听的是80端口,如下:

注意:./conf/nginx.conf就是nginx的配置文件。

 浏览器我们直接输入目标Linux机器的公网ip,如下效果就说明部署成功了。

5、注意事项

情况一:如果是云服务器的话可能要在安全组放开80端口;

情况二:如果开启防火墙的话还要住下下给防火墙开放对应端口。

关于防火墙配置命令参见  防火墙相关命令_焱齿的博客-CSDN博客

二、Nginx常用命令

前言:使用nginx操作命令的前提条件是:必须进入nginx的目录。

cd /usr/local/nginx/sbin

2、常用命令

#查看nginx版本号
./nginx -v

#启动nginx
./nginx

#关闭nginx
./nginx -s stop

#重新加载nginx(如果修改nginx.conf中的配置,又不想重启nginx可以执行重加载)
./nginx -s reload

三、Nginx的配置文件

前言:nginx的配置文件路径为 /usr/local/nginx/conf/nginx.conf

nginx文件的组成主要包括三部分:

1、第一部分:全局块

配置文件开头至events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令。包括配置运行Nginx服务器的用户(组)、允许生成的worker preocess数,进程PID存放路径、日志存放路径和类型以及配置文件引入等。例如:

worker_processes  1;

        这是Nginx服务器并发处理服务的关键配置,worker_precesses值越大,可以支持的并发处理量也越多。注:但是会受到硬件、软件等设备的制约。

2、第二部分:events块

        events块主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否运行同时允许接受多个网络连接,选取哪种时间驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等。如下:

worker_connections  1024;

表示每个work process支持的最大链接数为1024.

注:这部分的配置对Nginx性能影响较大,在实际使用中应灵活配置

3、第三部分:http块

Nginx服务器中配置最频繁的部分。其有包含两部分:http全局快、server块。例如可以在此块中include其他路径的配置文件。

include /usr/local/services/zs_nginx_conf-1.0/conf/*.conf;

(1)http全局块

        http全局快配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。

(2)server块

        和虚拟主机有密切联系。注:从用户角度,虚拟主机就和一台独立的物理主机是一样的。

        每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。

        每个server块也分为全局server块,一级可以同时包含多个location块。

注:不同的server不能ip:port同时相同!!!!

#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;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

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

}

四、Nginx配置举例-代理上网(透明代理)

1、目标。

部署Nginx作为透明代理代理上网。相当于请求打到nginx后,nginx直接转发到互联网。

http {
    resolver 8.8.8.8;
    server {
        listen 7765;
        location / {
            proxy_pass http://$http_host$request_uri;
        }
    }
}

nginx实现代理上网,有三个关键点必须注意,其余的配置跟普通的nginx一样:
1.增加dns解析resolver;
2.增加无server_name名的server;
3.proxy_pass指令;

注:8.8.8.8是google提供的一个免费的dns服务,一般都这么写。

wget验证通过代理访问网页。

wget -c -r -np -k -L -p -e "http_proxy=http://118.xxx.193.69:7765" www.baidu.com

注意:

默认开源版本的nginx是不支持https请求的。通常浏览器都会讲讲请求重定向为https,你会发现凡是重定向为https的网页你都是打不开的。

例如:www.baidu.com  打不开; www.atguigu.com/ 之类的网站就可以打开。

为了nginx支持代理https协议,参见 这里

2、或者使用include也是可以的

在nginx.conf路径下新建proxy.conf文件,内容如下:

server {
    listen 7765;
    resolver 8.8.8.8;
    location / {
        #proxy_pass http://$http_host$request_uri;
        proxy_pass $scheme://$host$request_uri;
        root html;
        index index.html index.htm;
    }
}

nginx.conf中在server平齐的位置添加include语句.重启nginx即可。

 include /usr/local/nginx/conf/proxy.conf;

五、Nginx配置举例-反向代理1

1、准备与目标

如前所述,安装了httpd服务器。因为nginx占用的80端口,所以这里配置httpd监听的8080端口;而且我们放置了一些网页资源,通过8080端口可以访问相应资源。

 接下来我们配置一个反向代理,通过访问nginx默认监听的80端口就可以访问到httpd的8080端口提供的资源。

注:另外为了ip不直接包括在url中我们额外配置一下浏览器所在机器的<ip,域名>映射。

对于mac电脑修改起来很简单。

vim /etc/hosts


#添加如下记录就好
118.xxx.xxx.69 www.shuozhuo.com

测试一下果然能通过域名访问了。

 这里想把端口8080去掉,会发现是不行的。接下来我们要做的就是默认访问也能访问到这个资源。

2、具体配置与测试

 如下。在nginx.conf下添加如下两句。

#就是nginx部署机器的ip
server_name  118.195.193.69;


#将nginx 80端口监听的符合”location /“的请求都转发到本机的8080端口
proxy_pass  http://127.0.0.1:8080;

 重新加载nginx。

./nginx -s reload

之后按照默认端口访问就是可以的了。如下:

在nginx/logs目录下的access.log也是可以看到每次操作的日志记录的.

3、结论

        现在这里实现了隐藏真实服务器的效果,其实就是一个反向代理了。

六、Nginx配置举例-反向代理2

1、前期准备&目标

安装并配置好tomcat服务器;默认开放8081端口。准备好对应的网页!

#tomcat页面路径下创建 注:安装目录/webapps
/tomcat/a.html

//网页内容为
<h1>Welcome to tomcat!!</h1>

#httpd页面路径下创建 注:默认是绝对路径  /var/www/html
/httpd/a.html

//网页内容为
<h1>Welcome to httpd!!</h1>

安装并配置好httpd服务器;默认开放8080端口。准备好对应的网页!

通过请求url路径路由到不同的web服务器。具体来说:路径中含有/tomcat就路由到tomcat、路径中含有/httpd就路由到httpd服务器。

2、配置nginx

 nginx.conf中添加如下server(监听9000端口)。

    server {
        listen       9000;
        server_name  118.195.193.69;

        location ~ /httpd/{
            proxy_pass  http://127.0.0.1:8080;
        }
        location ~ /tomcat/{
            proxy_pass  http://127.0.0.1:8081;
        }
    }


#解释
①这段配置的含义是监听本机(118.195.193.69)的9000端口。
②请求uri匹配httpd字段就把请求转发到本机(127.0.0.1)的8080端口;就是httpd服务监听的端口。
③请求uri匹配tomocat字段就把请求转发到本机(127.0.0.1)的8081端口;就是tomcat服务监听的端口。

#其他关键字
(1)server→resolver:resolver的作用是指定DNS机器;例如:
server{
    resolver 10.xxx.xx.54 10.xxx.xx.15 ipv6=off;
}



#关键词解释
(1)proxy_pass:为代理转发的关键词
(2)root: 用于指定资源的root路径.如下例子中,实际的访问路径应该是 web服务器默认路径/opt/test/demo

location /demo {
    root /opt/test;
}

(3)expires: 配置缓存时间

expires 30s;   #缓存30秒
expires 30m;  #缓存30分钟   
expires 2h;     #缓存2小时
expires 30d;    #缓存30天

例如:
        location ~ /tomcat/{
            proxy_pass  http://127.0.0.1:8081;
            expires 30d; 
        }

#配置解释
(1)~ :用于表示uri包含正则表达式,并且区分大小写
(2)~* :用于表示uri包含正则表达式,不区分大小写
(3)= :用于不包含正则表达式的uri前,要求请求字符串与uri严格匹配;如果匹配成功就会立即处理,不在继续往下搜索。
(4)^~ : 用于不包含正则表达式的uri前,要求Nginx找到表示uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不使用location块中的正则uri和请求字符串做匹配。

匹配优先级: = 、 ^~ 、 ~/~*、不带符号。

3、验证效果

重启nginx

./nginx -s reload

访问效果如下:

 

六、Nginx配置举例-负载均衡

负载均衡本质也是反向代理的一种!!!

#http块中加入如下upstream

    upstream shuozhuosvr{
#       ip_hash;
        server 118.195.193.69:8080 weight=1;
        server 118.195.193.69:8081 weight=2;
    }



#server块中添加如下配置

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








#upstream基本语法
(1)一个upstream需要设置一个名称,这个名称可以在server里面当做proxy主机使用。
(2)一个upstream可以设置多个server,默认Nginx会轮询每个server,从而达到最基本的负载均衡效果。
(3) weight:每个server可以设置weight字段,实现简易的有权重的负载均衡。
(4) max_fails: 每个server可以设置max_fails字段;请求server发生错误失败数会累加,如果达到max_fails后,nginx会标记这个server为故障状态从而不去请求该server。
(5) fail_timeout: 前面说过了max_fails是请求server错误次数,如果达到了max_fails次数之后server会被标记为故障状态,那么多长时间会重新尝试呢?这个fail_timeout就是这个时间了,在达到max_fails次数之后server进入故障状态,而后在fail_timeout时间之后会被重新标记为正常状态。默认情况下,fail_timeout的时间是10秒。
(6)backup: 这个是备用服务器参数,可以为一个upstream设置一个backup的server,在生产server全部都出问题之后,可以自动切换到备用server上,为回复服务争取时间。


upstream default {
    server  ip1:9000 max_fails=5;
    server  ip2:9000 max_fails=3;
}


upstream default {
    server  ip1:9000 max_fails=5 fail_timeout=100;
    server  ip2:9000 max_fails=3 fail_timeout=60;
}

upstream default {
    server  ip1:9000 max_fails=5 fail_timeout=100;
    server  ip2:9000 max_fails=3 fail_timeout=60;
    server  backupip:9000 backup;
}


#其他可用策略
(1)轮询(默认)

(2)weight 设置权重

(3)ip_hash :每个请求按照访问ip的hash结果进行分配。这样每个固定的访客只会访问固定的后端服务器,可以解决session等问题。
    upstream shuozhuosvr{
        ip_hash;
        server 118.195.193.69:8080;
        server 118.195.193.69:8081;
    }

(4)fair: 按照后端服务器的相应时间来分配请求,相应时间越短越优先分配。
    upstream shuozhuosvr{
        server 118.195.193.69:8080;
        server 118.195.193.69:8081;
        fair
    }

七、Nginx高可用——结合keepalived

结合keepalived就可以实现自动的主备切换效果!!

猜你喜欢

转载自blog.csdn.net/mijichui2153/article/details/126236293