Nginx学习笔记 基础知识

举报
长路 发表于 2022/11/28 20:22:24 2022/11/28
【摘要】 文章目录前言一、正向代理与反向代理二、启动方式与组成结构三、Nginx配置文件配置文件(三个部分)1、关于root与alias指令2、关于代理参数2、关于代理参数 前言 本篇博客是学习Nginx的基础只是,如有问题请指出! 所有博客文件目录索引:博客目录索引(持续更新) 一、正向代理与反向代理 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求

@[toc]

前言

本篇博客是学习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;

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;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。