Nginx 教程(详细)

Nginx 教程(详细)

文章目录

  • Nginx 教程(详细)
      • 1:简介
      • 2:安装
        • 2.1:安装gcc环境
        • 2.2:安装pcre
        • 2.3:安装zlib
        • 2.4:安装openssl
        • 2.5:安装Nginx
        • 2.6:修改配置文件 nginx.conf
      • 3:运行
      • 4:反向代理
        • 4.1:location块
      • 5:负载平衡
      • 6:解决跨域问题

1:简介

Nginx 是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存。

2:安装

2.1:安装gcc环境
yum install gcc-c++
2.2:安装pcre
yum install -y pcre pcre-devel
2.3:安装zlib
yum install -y zlib zlib-devel
2.4:安装openssl
yum install -y openssl openssl-devel
2.5:安装Nginx

下载源代码包:

wget http://nginx.org/download/nginx-1.18.0.tar.gz

Nginx官网下载地址:http://nginx.org/en/download.html

Nginx 教程(详细)_第1张图片
建议下载稳定版本使用。

解压并安装 Nginx:

# tar -xvf nginx-1.18.0.tar.gz
# cd nginx-1.18.0
# ./configure
# make
# make install
2.6:修改配置文件 nginx.conf
vi /usr/local/nginx/conf/nginx.conf

Nginx 教程(详细)_第2张图片

3:运行

/usr/local/nginx/sbin/nginx -s reload

如果报 [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) 错误,则执行 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 命令后再次启动运行 Nginx。

查看 Nginx 启动状态

ps -ef | grep nginx

注意:外部访问时要关闭防火墙。

访问 IP 地址:

Nginx 教程(详细)_第3张图片

Nginx 相关命令:

./nginx -s reload            # 重新载入配置文件
./nginx -s reopen            # 重启 Nginx
./nginx -s stop              # 停止 Nginx
./nginx -s quit              # 关闭 Nginx

4:反向代理

反向代理你可以理解为:

网络上我重拳出击,现实中我唯唯诺诺。 ——键仙

Nginx 教程(详细)_第4张图片

你并不知道键仙的真实姓名,位置,年龄或任何东西,拥有很好的隐秘性。

Nginx 教程(详细)_第5张图片

反向代理也是如此。尽管可以访问服务器,但它不是真正的服务器。服务器的反向代理成功隐藏了真实的服务器地址。

Nginx 实现非常简单,只需要添加:

proxy_pass  http://xxxxxxxxxx;
server {
        listen       80;
        server_name  localhost;

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

其中,http://180.101.49.11 是百度的 ip 地址,重新载入配置文件并重启后,访问 http://服务器ip地址,会自动返回百度数据。

4.1:location块

location: 配置请求的路由,以及各种页面的处理情况。

server {
        ......
        ......
        ......     
        
        location  ~*^.+$ {       
           #root html;  #根目录
           #index index.html index.htm;  #设置默认页
           proxy_pass  http://xxxxxxxx;  #请求转向xxxxxxxx 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }

location 第一行是一个正则,对请求的url过滤,正则匹配,~ 为区分大小写,~* 为不区分大小写。

每一行都有注释,我们举个例子来巩固下。

	server {
        listen       9999;
        server_name  localhost;

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

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

这里我们写了两个 location,第一个 location 代表:当我们访问 http://localhost:9999 会自动拼接 url ,最终访问 url 为:http://localhost:9999/html/index2.html.

error_page 代表错误处理:当出现 500 502 503 504 时,请求就变为了 http://localhost:9999/50x.html

第二个location 对 /50x.html 进行了拦截过滤,拼接 url 后就变为了 http://localhost:9999/html/50x.html

5:负载平衡

Nginx 教程(详细)_第6张图片
Nginx 负载平衡主要通过配置:upstream mysvr

假如,我们有两台服务器,某天,其中一台服务器突然挂掉了,那么我们就需要启动备用服务器。

upstream mysvr { 
    server 192.168.0.11:1111;
    server 192.168.0.22:2222 backup; #备用
}

再后来,我们又购置了一台服务器,要求它分担正在运行服务器的压力:(平均分配)

upstream mysvr { 
    server 192.168.0.11:1111;
    server 192.168.0.33:3333;
    server 192.168.0.22:2222 backup; #备用
}

又过了一阵,突然发现网上某台服务器打折扣,而且配置性能时原来单个服务器性能的 2 倍,我们马上购置了一台。

既然配置高,那我们就可以让它多做点事情。

添加权重:

upstream mysvr { 
    server 192.168.0.11:1111 weight=1;
    server 192.168.0.33:3333 weight=1;
    server 192.168.0.55:5555 weight=2;
    server 192.168.0.22:2222 backup; #备用
}

执行顺序就变成了:

192.168.0.11:1111;
192.168.0.33:3333;
192.168.0.55:5555;
192.168.0.55:5555;
192.168.0.11:1111;
192.168.0.33:3333;
192.168.0.55:5555;
192.168.0.55:5555;

6:解决跨域问题

	location / {
          add_header Access-Control-Allow-Origin * always;
          add_header Access-Control-Allow-Headers "kbn-xsrf,Content-Type";
          add_header Access-Control-Allow-Methods "GET, POST, PUT, OPTIONS";
          if ( $request_method = 'OPTIONS' ) { 
              return 200;
          }
          proxy_pass http://192.168.1.155:5601;
          root   html;
          index  index.html index.htm;
     }

你可能感兴趣的:(Nginx,nginx)