nginx笔记(千峰)

一: 正向代理和反向代理:

      正向代理: 客户端想要访问谷歌是访问不了的, 通过正向代理, 可以访问谷歌. 

             客户端了解代理服务器和目标服务器是谁.

             目的就是突破访问权限, 对目标服务器隐藏客户端ip地址;

          

      反向代理: 配置在服务器端的, 与客户端完全没有关系的.

            客户端不知道访问的是哪台服务器, 

            使用反向代理可以达到负载均衡, 并且可以隐藏真正的ip地址

               

一.   当有服务超过150的并发访问量时候, 需要配置多台tomcat服务器, 才能抗住压力.

       但多台服务器时候, 客户端会向哪一台服务器发送请求怎么确定? 并且动静资源怎么处理? 然后请求通过数据库获取数据返回, 将数据返回给客户端

此时, 可以将nginx放到服务器前, 让服务器来通过自己的负载均衡策略,

    • 决定将客户端的请求发送到哪台服务器.
    • 并且将静态资源放到Nginx, 不需要去服务器请求静态资源
    • nginx承受的并发访问量轻松到5w

二. niginx安装

  2.1.准备yml文件

version: '3.1'
services: 
  nginx:
    image: daocloud.io/library/nginx:1.13.2
    container_name: nginx
    restart: always
    environment:
      - TZ=Asia/Shanghai
    ports: 
      - 80:80
volumes:
- /opt/docker_nginx/conf.d/:/etc/nginx/conf.d

  2.2, 创建docker_nginx目录, docker-compose.yml文件, 并用docker-compose up -d 命令来启动.

    之后, 访问80端口, 就可以查看到nginx的欢迎页面

 2.3. 配置nginx

先进入nginx内部,然后cat nginx.conf的内容:


 
user  nginx;
worker_processes  1;# 值越大, 并发能力越强

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024; # 值越大, 并发能力越强
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf; # 引入的配置文件
}

引入的conf.d下的default.conf文件内容(需要修改的是server块的这三个内容)

server {
    listen       80; # nginx的端口
    server_name  localhost;    # nginx的域名

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {   # 路径映射
        root   /usr/share/nginx/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   /usr/share/nginx/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;
    #}
}

 根据数据卷, 在/opt/docker_nginx/conf.d目录下, vi   conf.d, 添加自己的配置:

server {
    listen       80; # nginx的端口
    server_name  localhost;    # nginx的域名

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {   # 路径映射
        root   /usr/share/nginx/html;  # 路径
        index  index.html index.htm;
    }
}

三. 基于nginx实现反向代理

3.1 准备:

  • 启动一个tomcat服务器;保证能够通过服务器直接访问到tomcat
  • 修改nginx的配置: 根据数据卷中的配置, vi default.conf , 通过nginx来访问tomcat
  • 设置proxy_pass  值是tomcat的地址

server {
  listen 80;
  server_name localhost;
  # 配置反向代理
  location / {
    proxy_pass http://192.168.43.173:8080/;
  }
#  location / {
 #   root /usr/share/nginx/html;
  #  index index.html index.htm;
   # }
}

3.2 location块:配置请求的路由配置,

      可以写多个location块, 对应不同的路径

       配置规则:

    •  = 精准配置 location = / {  精准配置url, 后面不能带任何路径}
    • ^~  精准前缀匹配   location ~^ /img/{ 配置所有有以img开头的路径} 
    • ~ 正则匹配  location ~ /xxx{ 匹配所有以xxx开头的路径}
    • ~* .(gif|jpg|png)${匹配以gif jpg png结尾的}
    • /  通用配置 location /xxx {  后面能带xxx开头的路径}

location /admin/ { proxy_pass http://127.0.0.1:8090 }

 

example.com/admin -> http://127.0.0.1:8090
example.com/admin/test -> http://127.0.0.1:8090/test
example.com/admin/one -> http://127.0.0.1:8090/one

四. nginx负载均衡(轮询. 权重和ip哈希三种方式)

    4.1.轮询: ababab这种大致情况,轮流访问nginx配置的proxy_pass下的路径

       default.conf的配置(注意:自己声明的变量中不能用下划线)

#配置一个upstream
upstream my-server{ server 192.168.43.173:8080; server 192.168.43.173:8083; } server { listen 80; server_name localhost; #轮询的配置 location / { proxy_pass http://my-server/; } # 配置反向代理 # location / { # proxy_pass http://192.168.43.173:8080/; # } # location / { # root /usr/share/nginx/html; # index index.html index.htm; # } }

     4.2. 权重: 按照 服务器的处理速度 来决定访问比例;下面的2:10的比例, 本人亲测, 比较准;

    配置: 在轮询基础上加上权重即可

#不加权重是轮询,加权值是按权重划分访问比例次数

upstream my-server-weight{
  server 192.168.43.173:8080 weight=2;
  server 192.168.43.173:8083 weight=10;
}

#upstream my-server{
#  server 192.168.43.173:8080;
#  server 192.168.43.173:8083;
#}
server {
  listen 80;
  server_name localhost;
#轮询的配置
  location / {
    proxy_pass http://my-server-weight/;
  }
  # 配置反向代理
#  location / {
 #   proxy_pass http://192.168.43.173:8080/;
 # }
#  location / {
 #   root /usr/share/nginx/html;
  #  index index.html index.htm;
   # }
}

     4.3 ip哈希: nginx拿到ip地址后, 通过哈希运算得到结果, 来决定打到哪台服务器;

                     即如果ip地址不变, 则一直访问同一台服务器.

# ip哈希
upstream my-server-iphash{
  ip_hash;
  server 192.168.43.173:8080;
  server 192.168.43.173:8083;
}


#不加权重是轮询,加权值是按权重划分访问比例次数

#upstream my-server-weight{
#  server 192.168.43.173:8080 weight=2;
#  server 192.168.43.173:8083 weight=10;
#}

#upstream my-server{
#  server 192.168.43.173:8080;
#  server 192.168.43.173:8083;
#}
server {
  listen 80;
  server_name localhost;
#轮询的配置
  location / {
    proxy_pass http://my-server-iphash/;
  }
  # 配置反向代理
#  location / {
 #   proxy_pass http://192.168.43.173:8080/;
 # }
#  location / {
 #   root /usr/share/nginx/html;

四. nginx 动静分离

    4.1 为什么动静分离: 通过动静分离提高并发能力

         nginx的并发能力公式: 

           动态资源: worker_processes * worker_connections / 4 (为什么是4, 因为nginx要访问服务器和数据库,)

           静态资源: worker_processes * worker_connections / 2 (因为nginx直接给就可以, 不需要访问数据库)

         

      4.2 配置

      动态资源代理: 

 location / {
    proxy_pass  路径;
  }

     静态资源代理: 访问的是nginx所在的服务器的静态资源, 通过docker添加配置, 把nginx所在的服务器映射到数据卷中,达到修改数据卷就修改静态资源

 location / {
   root 静态资源路径;
   index 默认访问的路径资源;
   autoindex on: #代表展示全部静态资源, 以列表形式展开
  }

1.修改docker-compose.yml

2 , 操作步骤

 然后访问http://192.168.43.173/img/1.jpg或者http://192.168.43.173/html就会直接冲nginx服务器拿到了.

原文地址:https://www.cnblogs.com/dangdanghepingping/p/14330627.html