Nginx学习笔记 基础知识

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: Nginx学习笔记 基础知识

一、正向代理与反向代理


反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;


隐藏了真正的服务端,作为用户只知道这个代理服务器,它会把我们的请求转发到真实为我们服务的那台服务器那里去。

正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。


代理客户端去请求服务器,隐藏了真实客户端,服务器并不知道真实的客户端是谁。实际场景:科学上网。

总结:正向代理代理对象是客户端,反向代理代理对象是服务端。


Nginx应用场景:软件层面一般常用Nginx来做反向代理服务器,它的性能非常好,用来做负载均衡。


个人理解:


正向代理:类似于一个跳板机,对应的代理服务器去帮我们访问资源再返回给我们。
反向代理:以代理服务器来接收网络请求,接着请求转发给内部的服务器接收到请求之后再响应给用户,此时对外表现为反向服务器。


二、启动方式与组成结构


启动方式


普通启动:切换到sbin目录下,直接执行./nginx。


指定配置文件启动:nginx -c /usr/local/nginx/conf/nginx.conf,-c表示指定后者路径必须为绝对路径。


ps:Nginx启动后,安装目录下会出现一些_tmp结尾的文件,这些是临时文件。


体系结构


nginx 体系结构:由 master 进程和其 worker 进程组成。master 进程读取配置文件,并维护 worker 进程,而 worker 进程则对请求进行实际处理。


个人理解:


在nginx中包含master以及worker进程,master进程主要负责读取配置文件以及维护worker进程,worker进程则是真正处理请求。


三、Nginx配置文件


配置文件(三个部分)

参考:Nginx配置使用详解


Nginx的核心配置文件主要由三个部分构成:基础配置、exents配置、http配置。


基础配置


# 配置worker进程运行的用户 nobody也是一个linux用户,一般用于启动程序,无密码
#user  nobody;
# 配置工作进程的数目,可以进行调整,一般是CPU数量或者对应两倍数量
worker_processes  1;
# 全局错误日志配置,之后各个模块的错误日志可以在这里看,默认是errror
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  /var/log/nginx/error.log warn;
# 配置的进程pid文件,在这个文件里可以找到nginx的进程号
pid        /var/run/nginx.pid;


events配置


# 事件配置
events {
  # 每个worker连接数上限
    worker_connections  1024;
}


Http配置


(1)基本配置


# 配置HTTP服务器,利用这个服务器的反向代理功能提供负载均衡支持
http {
  # 配置nginx支持哪些多媒体类型,在/etc/nginx/mime.types中你可以看到所有支持的类型
    include       /etc/nginx/mime.types;
    # 默认我们使用的多媒体类型,这里就表示全部类型(指任意类型的二进制流数据)
    default_type  application/octet-stream;
  # 表示我们日志的一个打印格式:地址、用户、请求、状态、请求体数量、referer来源、用户身份
    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中记录了所有请求的打印信息(err.log只记录报错信息)
    access_log  /var/log/nginx/access.log  main;
  # 开启高效文件传输模式
    sendfile        on;
    # 防止网络阻塞
    #tcp_nopush     on;
  # 长连接超时时间,单位是秒
    keepalive_timeout  65;
  # 开启gzip压缩,所有文件进行压缩,但是到客户端会有一个解压的过程
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}


关于access.log文件随着请求数量增多以及时间增长就会特别的问题:access.log日志记录与关闭


# 采取方式
# ①定时脚本:
* 1 * * *  echo "" > /home/wwwlog/access.log   #每日凌晨1点清空日志
# ②关闭日志记录,access.log可以关,但是error.log必须开启。注销掉access.log接着手动配置关闭
# access_log  /var/log/nginx/access.log  main;
access_log off;


(2)server配置,可以配置多个


nginx.conf:
# 在redis.conf中你可看到一个包含语法,这就表示我们可以自己去配置一下server来让nginx进行代理
include /etc/nginx/conf.d/*.conf;
1
2
xxx.conf:注意每一行要分号结尾
# 配置虚拟主机
server {
  # 配置监听的端口
    listen       80;
    # 配置的服务名
    server_name  localhost;
  # 配置字符集
    #charset koi8-r;
    # 配置本虚拟主机的访问日志
    #access_log  /var/log/nginx/log/host.access.log  main;
  # 匹配/的请求,若是匹配到就会进行处理
    location / {
      # 配置服务器默认网站的根目录位置,默认是nginx安装目录下的html文件目录
        root   /usr/share/nginx/html;
        # 首页访问的地址,可以是.html或.htm结尾
        index  index.html index.htm;
    }
  # 404跳转页面的配置
    #error_page  404              /404.html;
  # 重定向配置
    # redirect server error pages to the static page /50x.html
    #
    # 
    # 错误页的配置
    error_page   500 502 503 504  /50x.html;
    # 精确匹配:匹配/50x.html的url进行跳转路径,与我们之气匹配的/也是一致的
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
      # 设置代理服务器的地址,可以是主机名称,IP地址加端口号等形式
    #    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;
    #}
}



1、关于root与alias指令


参考文章:nginx的root 指令


一般在默认的default.conf中在location下是root,表示根目录的意思:
location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}


其中root指令可以使用alias指令来进行交换,效果都是说指定目录中找文件资源。


实际应用区别:只有在/xxx/这种情况才会体现出来


# 访问/img/,ningx会自动去/var/www/image/目录找文件
location /img/ {
    alias /var/www/image/;
}
# 访问/img/,ningx会自动去/var/www/image/img/目录找文件
location /img/ {
    root /var/www/image;
}


alias是一个目录别名的定义,root则是最上层目录的定义。


注意点:


1、在一个location中,alias可以存在多个,但是root只能有一个。


2、alias只能存在与location中,但是root可以用在server、http和location中。


3、alias后面值必须要“/”结束,否则会找不到文件,而root的“/”可有可无。


坑点:若是访问自己的本地静态资源最好就是在对应server listen:80下来写匹配location,不要自己重新另外编写server 监听其他端口来访问本地路径!!!


2、关于代理参数


# 负载均衡必加:作用是将原http请求的Header中的Host字段放到转发的请求里。若是不加这行nginx转发请求中就不会有Host字段,而服务器根据Host来区分你请求的哪个域名资源
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;


地路径!!!


2、关于代理参数


# 负载均衡必加:作用是将原http请求的Header中的Host字段放到转发的请求里。若是不加这行nginx转发请求中就不会有Host字段,而服务器根据Host来区分你请求的哪个域名资源
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
7月前
|
tengine Rust 负载均衡
反向代理学习笔记(一) Nginx与反向代理绪论
反向代理学习笔记(一) Nginx与反向代理绪论
|
前端开发 应用服务中间件 nginx
前端学习笔记202305学习笔记第二十三天-nginx项目部署500情况
前端学习笔记202305学习笔记第二十三天-nginx项目部署500情况
68 0
|
7月前
|
Kubernetes 应用服务中间件 nginx
nginx-ingress学习笔记
nginx-ingress学习笔记
153 0
|
缓存 负载均衡 应用服务中间件
|
负载均衡 前端开发 应用服务中间件
Nginx学习笔记
Nginx学习笔记
101 0
|
JavaScript 前端开发 应用服务中间件
前端学习笔记202305学习笔记第二十三天-vue打包nginx部署
前端学习笔记202305学习笔记第二十三天-vue打包nginx部署
86 0
|
缓存 算法 安全
一文带你了解Nginx基础知识 | 建议收藏 中
一文带你了解Nginx基础知识 | 建议收藏 中
193 0
一文带你了解Nginx基础知识 | 建议收藏   中
|
tengine NoSQL Unix
一文带你了解Nginx基础知识 | 建议收藏 上
一文带你了解Nginx基础知识 | 建议收藏 上
206 0
|
负载均衡 前端开发 Ubuntu
服务器端知识库nginx基础知识篇
随着spa架构的普及,在日常开发中无论对于前端还是服务端的开发都带来了很大的便利,前端同学也能接触到更多的知识,其中前端的服务部署也慢慢转移到了前端开发中。而目前最常用的前端服务部署方案便是nginx代理服务器。
|
Web App开发 算法 安全
一文带你了解Nginx基础知识 | 建议收藏 下
一文带你了解Nginx基础知识 | 建议收藏 下
200 0