文章目录

前言

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


我是长路,感谢你的耐心阅读。如有问题请指出,我会积极采纳!
欢迎关注我的公众号【长路Java】,分享Java学习文章及相关资料
Q群:851968786 我们可以一起探讨学习
注明:转载可,需要附带上文章链接