nginx代理

目录

1、nginx是什么

2、nginx能做什么

2.1、网页静态服务器

2.1.1 使用nginx解决浏览器本地缓存

2.2、反向代理、负载均衡

2.2.1 使用反向代理解决跨域问题

2.3、虚拟主机

3、使用docker安装nginx

4、修改配置文件

4.1 修改主配置nginx.conf文件

4.2 修改从配置default.conf文件


1、nginx是什么

nginx是一个使用c语言开发的高性能http服务器及反向代理服务器

2、nginx能做什么

2.1、网页静态服务器

2.1.1 使用nginx解决浏览器本地缓存

1、什么是浏览器缓存

简单来说,浏览器缓存就是把一个已经请求过的Web资源(如html页面,图片,js,数据等)拷贝一份副本储存在浏览器中。缓存会根据进来的请求保存输出内容的副本。当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。比较常见的就是浏览器会缓存访问过网站的网页,当再次访问这个URL地址的时候,如果网页没有更新,就不会再次下载网页,而是直接使用本地缓存的网页。只有当网站明确标识资源已经更新,浏览器才会再次下载网页。

2、 为什么使用缓存:

(1)减少网络带宽消耗

(2)降低服务器压力

(3)减少网络延迟,加快页面打开速度

浏览器端的缓存规则:

新鲜度(过期机制):也就是缓存副本有效期。

校验值(验证机制):资源的实体标签Etag(EntityTag)

在HTTP请求和响应的消息报头中,常见的与缓存有关的消息报头有:

3、 nginx.conf配置

server {
        listen       80;
        server_name  XXXXXX;
        client_max_body_size 80M;

        location / {
            root   /usr/local/src/web/test;
            index  index.html index.htm;

            ##缓存配置
            add_header Cache-Control no-cache;
            add_header Pragma no-cache;
            add_header Expires 0;
        }

        location /test1 {
            proxy_pass  http://ip:8081;
        }

        location /test2 {
            proxy_pass  http://ip:80;
        }

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

    }

2.2、反向代理、负载均衡

2.2.1 使用反向代理解决跨域问题

1、 什么是跨域

跨域,指的是浏览器不能执行其他网站的脚本或者访问服务端。它是由浏览器的同源(域名,协议,端口)策略造成的,是浏览器对JavaScript施加的安全限制。

2、为什么会产生跨域

当前端调用第三方网页或者服务端所用(协议+域名+端口)与前端页面调用不一致时,就会出现跨域问题。

  1. 浏览器先根据同源策略对前端页面和后台交互地址做匹配,若同源,则直接发送数据请求;若不同源,则发送跨域请求。
  2. 服务器解析程序收到浏览器跨域请求后,根据自身配置返回对应文件头。若未配置过任何允许跨域,则文件头里不包含Access-Control-Allow-origin字段,若配置过域名,则返回Access-Control-Allow-origin对应配置规则里的域名的方式
  3. 浏览器根据接受到的http文件头里的Access-Control-Allow-origin字段做匹配,若无该字段,说明不允许跨域;若有该字段,则对字段内容和当前域名做比对,如果同源,则说明可以跨域,浏览器发送该请求;若不同源,则说明该域名不可跨域,不发送请求

3、什么是同源策略

1、同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。
2、所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
3、同源策略限制以下几种行为:
(1)Cookie、LocalStorage 和 IndexDB 无法读取
(2)DOM 和 Js对象无法获得
(3)AJAX 请求不能发送

2.3、虚拟主机

3、使用docker安装nginx

1. 拉取nginx镜像
$ docker pull nginx
 
2. 启动容器
$ netstat -lnt | grep 8082
$ docker run -it --name nginx-test --restart=always -p 8082:80 -d nginx
 
3. 创建挂载文件目录
$ mkdir -p /usr/local/docker/nginx/{html,conf,logs,conf.d}
#html: nginx存储网站网页的目录
#logs: nginx日志目录
#conf: nginx配置文件目录
 
4. 给conf挂载目录中拷贝一份配置文件,html下放置index.html文件
$ docker cp nginx-test:/etc/nginx/nginx.conf /usr/local/docker/nginx/conf/
$ docker cp nginx-test:/usr/share/nginx/html/index.html /usr/local/docker/nginx/html/
 
4. 挂载目录
$ docker run -it -p 80:80 --name nginx-web \
> -v /usr/local/docker/nginx/logs:/var/log/nginx \
> -v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
> -v /usr/local/docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
> -v /usr/local/docker/nginx/html:/usr/share/nginx/html \
> --restart=always \
>--privileged=true \
> -d nginx
 
5. 修改宿主机中的nginx.conf,并没有实时同步到容器中,解决办法为修改文件后重启容器
$ docker restart nginx-web

4、修改配置文件

4.1 修改主配置nginx.conf文件

1. 文件路径
/etc/nginx/nginx.conf

2. 文件内容说明
-- 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
user  nginx; #运行用户,默认即是nginx,可以不进行设置
worker_processes  4; #Nginx进程,一般设置为和CPU核数一样
error_log  /var/log/nginx/error.log warn; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
#进程pid存放位置
pid        /var/run/nginx.pid;

-- events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}

-- http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    #设置日志模式
    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;   #nginx访问日志存放位置
    sendfile        on;   #开启高效传输模式
    #tcp_nopush     on;    #减少网络报文段的数量
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout  65;  #保持连接的时间,也叫超时时间,默认为75s,可以在http,server,location块。
    #gzip  on;  #开启gzip压缩
    error_page 404 https://www.baidu.com; #错误页
    proxy_intercept_errors on;    #如果被代理服务器返回的状态码为400或者大于400,设置的error_page配置起作用。默认为off。
    #proxy_method get;    #支持客户端的请求方法。post/get;
    include /etc/nginx/conf.d/*.conf; #包含的子配置项位置和文件

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
}

#惊群现象:一个网路连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能。

#每个指令必须有分号结束。

4.2 修改从配置default.conf文件

-- server块:配置虚拟主机的相关参数,一个http中可以有多个server。
server {
    listen       80;  //监听端口为80,可以自定义其他端口,也可以加上IP地址,如:listen 127.0.0.1:8080;
    server_name  localhost; //定义网站域名,可以写多个,用空格分隔。
    #charset koi8-r; //定义网站的字符集,一般不设置,而是在网页代码中设置。
    #access_log  logs/host.access.log  main; //定义访问日志,可以针对每一个server(即每一个站点)设置它们自己的访问日志。
 
-- location块:配置请求的路由,以及各种页面的处理情况。
  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
  # 把后台错误重定向到静态的50x.html页面,当状态码为500、502、503、504时,则访问50x.html
  error_page   500 502 503 504  /50x.html;
  当路径是/50x.html去找/usr/share/nginx/html里面的文件
  location = /50x.html {
      root   /usr/share/nginx/html;
  }
 
  # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  如果访问的是.php结尾会把请求转发给http://127.0.0.1;
  # 代理PHP脚本到80端口上的apache服务器
  值Apache服务器
  #location ~ \.php$ {
  #    proxy_pass   http://127.0.0.1; //proxy_pass后面指定要访问的url链接,用proxy_pass实现代理。
  #}
 
  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  # 把PHP脚本9000端口上监听的FastCGI服务
  执行时PHP服务器
  如果访问的是.php结尾会把请求转发给127.0.0.1:9000;
  #location ~ \.php$ {
  #    root           html;
  #    fastcgi_pass   127.0.0.1:9000; /定义FastCGI服务器监听端口与地址,支持两种形式,1 IP:Port, 2 unix:/path/to/sockt
  #    fastcgi_index  index.php;
  #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; //定义SCRIPT_FILENAME变量,后面的路径/scripts为上面的root指定的目录
  #    include        fastcgi_params; //引用prefix/conf/fastcgi_params文件,该文件定义了fastcgi相关的变量
  #}
 
  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one
  #allow:允许ip访问
  #deny:禁止ip访问
  #all:所有ip
  # 不允许访问.htaccess文件
  #location ~ /\.ht { //访问的url中,以/.ht开头的,如,www.example.com/.htaccess,会被拒绝,返回403状态码。
  #    deny  all; //禁止所以人访问
  #}
}

# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#    listen       8000;  //监听8000端口
#    listen       somename:8080;  //指定ip:port
#    server_name  somename  alias  another.alias;  //指定多个server_name

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


# HTTPS server
#
#server {
#    listen       443 ssl;  //监听443端口,即ssl
#    server_name  localhost;

### 以下为ssl相关配置
#    ssl_certificate      cert.pem;    //指定pem文件路径
#    ssl_certificate_key  cert.key;  //指定key文件路径

#    ssl_session_cache    shared:SSL:1m;  //指定session cache大小
#    ssl_session_timeout  5m;  //指定session超时时间
#    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   //指定ssl协议
#    ssl_ciphers  HIGH:!aNULL:!MD5;  //指定ssl算法
#    ssl_prefer_server_ciphers  on;  //优先采取服务器算法
#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}

4.3 负载均衡

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值