nginx.conf的部分配置说明

发布时间:2024年01月17日

1.正向代理和方向代理

1.正向代理
1.解释

正向代理服务器位于客户端和目标服务器之间,客户端通过代理服务器访问目标服务器。代理服务器会将客户端的请求转发到目标服务器,并将目标服务器的响应返回给客户端。

2.特点

隐藏客户端的真实 IP 地址。
绕过防火墙或其他网络限制。
提高访问速度。
提供安全性和隐私性。

3.配置
server {
    listen 80;
    proxy_pass http://target_server:80;
}
2.反向代理
1.解释

反向代理服务器位于目标服务器和客户端之间,客户端直接访问反向代理服务器,反向代理服务器再将请求转发到目标服务器,并将目标服务器的响应返回给客户端。

2.特点

负载均衡。
提高安全性。
提供缓存。
隐藏目标服务器的真实 IP 地址。

3.配置
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://backend_server:80;
    }
}

2.nginx.conf大概说明

# 全局配置
user nginx;  # 指定Nginx运行的用户
worker_processes auto;  # 自动设置工作进程的数量

error_log /var/log/nginx/error.log;  # 错误日志文件路径
pid /var/run/nginx.pid;  # 进程ID文件路径

# 事件模块配置
events {
    worker_connections 1024;  # 每个工作进程允许的最大连接数
}

# HTTP模块配置
http {
    include /etc/nginx/mime.types;  # 包含MIME类型配置文件

    # 默认文件类型
    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;  # 启用TCP_NOPUSH选项
    tcp_nodelay on;  # 启用TCP_NODELAY选项

    # 服务器配置
    server {
        listen 80;  # 监听端口号

        server_name example.com;  # 服务器域名

        location / {
            root /var/www/html;  # 网站根目录
            index index.html;  # 默认首页文件
        }
    }
}

3.域名证书配置

    server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      www.abc.top.pem;
        ssl_certificate_key  www.abc.top.key;
		ssl_session_timeout 5m;  # 超时时间 如果在 5 分钟内没有新的数据传输,SSL 会话将被终止
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Nginx 支持 TLSv1、TLSv1.1 和 TLSv1.2
        # Nginx 使用指定的 SSL 密码套件来加密与客户端之间的通信,以确保数据的安全。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    # Nginx启用服务器优先密码套件,这意味着服务器可以选择最安全的密码套件来加密与客户端之间的通信。
        ssl_prefer_server_ciphers on;

        #location / {
        #    root   html;
        #    index  index.html index.htm;
        #}
        location /piano {
			 alias /www/web/dist/index;
           	 try_files $uri $uri/ /piano/index.html;
        }

	location / {
			# 对 / 路径下的所有请求转发到 http://127.0.0.1:8090。
			proxy_pass http://127.0.0.1:8090;
			#  Nginx 在将请求转发到后端服务器之前,将请求的主机头设置为 $host 变量的值。
            proxy_set_header Host $host;
            # $remote_addr 变量的值是客户端的真实 IP 地址
            proxy_set_header X-Real-IP $remote_addr;

   	}
    }

4.nginx 反向代理匹配顺序

	location /img{  
	    proxy_set_header Host $host;
	    proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://datacenter/img ;  
            proxy_redirect default;  
        }
			location /img/1{  
	    proxy_set_header Host $host;
	    proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://datacenter/img/1;  
            proxy_redirect default;  
        }
1.案例

此时 一个img/1请求会匹配/img/1而不是/img

2.匹配原则

Nginx 的 location 块匹配顺序如下:
完全匹配
最长前缀匹配
正则表达式匹配

5.细节

1.根据ip不同可监听多个同一端口
	server {
		listen       80;
		server_name  a.abc.info; 		 
		rewrite ^/(.*) https://a.abc.info permanent;	 
	}
	
	server {
		listen       80;
		server_name  sso.abc.info; 		 
		rewrite ^/(.*) https://sso.abc.info permanent;	 
	}
	   server {  
        listen       80;  
        server_name  localhost;
    } 
	

80 端口,用于处理来自 localhost 的请求。
80 端口,用于处理来自 a.abc.info 的请求。
80 端口,用于处理来自 sso.abc.info 的请求。

2.root和alias异同

root指令用于指定Nginx查找文件的根目录,
alias指令用于指定Nginx将请求重定向到的文件或目录。

3.try_files
 location /piano {
  	 alias /www/web/dist/index;
       	 try_files $uri $uri/ /piano/index.html;
    }

try_files指令告诉Nginx尝试以下顺序查找文件:
$ uri变量表示客户端请求的URI。例如,如果客户端请求/piano/index.html,则$uri变量的值为/piano/index.html。
$ uri/表示在客户端请求的URI后面添加一个斜杠。例如,如果客户端请求/piano/index.html,则 $uri/的值为/piano/index.html/

4.location =/ 和 location /
location / {}:

这个配置指令匹配所有请求路径,因为/表示根路径。
当请求到达Nginx服务器时,无论请求的路径是什么,这个location块都会起作用。
你可以在location / {}的大括号内编写具体的配置指令来处理所有请求路径。

location =/ {}:

这个配置指令只匹配根路径的请求,即只匹配路径为/的请求。
当请求路径为根路径时,这个location块会起作用。
你可以在location =/ {}的大括号内编写具体的配置指令来处理根路径请求。

总结

location / {}匹配所有请求路径,而location =/ {}只匹配根路径请求。你可以根据具体需求选择使用哪个配置指令来处理请求。

location =/ {
	# 将根路径的请求重写为https://abc.info/qwe/shiro-cas ; 并使用break停止处理其他location块
    rewrite ^/(.*) https://sso.abc.info/cas/login?service=https://abc.info/qwe/shiro-cas break;
}

6.nginx常用配置

1.nginx配置端口ssl
# 监听端口号为8847,并使用默认的SSL证书和密钥
listen       8847 default backlog=2048 ssl;

# 虚拟主机的域名是“abc.info”,端口号是8847 
server_name  abc.info:8847 ;

# 使用SSL证书和密钥来加密与客户端的通信
ssl_certificate /usr/local/nginx/ssl_cert/abc.info.pem;
ssl_certificate_key /usr/local/nginx/ssl_cert/abc.info.key;

# SSL会话的超时时间为5分钟
ssl_session_timeout  5m;

# 关闭Nginx的服务器标识
server_tokens off;

# 在FastCGI请求中设置HTTPS参数为“on”
fastcgi_param   HTTPS               on;

# 在FastCGI请求中设置HTTP_SCHEME参数为“https”
fastcgi_param   HTTP_SCHEME         https;

# 在代理请求中设置X-Forwarded-Host头字段的值为请求的主机名
proxy_set_header X-Forwarded-Host $host;

# 在代理请求中设置X-Forwarded-Server头字段的值为请求的主机名
proxy_set_header X-Forwarded-Server $host;

# 在代理请求中设置X-Forwarded-For头字段的值为代理服务器添加的X-Forwarded-For头字段的值
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# 处理来自“/URI的请求
location / {
    # Nginx查找文件的根目录
    root /home/site/front/manage/dist;

    # Nginx在根目录中查找的默认文件
    index index.html index.htm;

    # Nginx尝试查找文件的顺序
    try_files $uri $uri/ /index.html;
}

# 处理来自“/api/URI的请求
location /api/ {
    # Nginx将请求转发到的目标服务器
    proxy_pass http://localhost:8846/;

    # 在代理请求中设置X-real-ip头字段的值为远程地址
    proxy_set_header X-real-ip $remote_addr;

    # 在代理请求中设置Host头字段的值为请求的主机名
    proxy_set_header Host $http_host;

    # 代理连接的超时时间为300秒
    proxy_connect_timeout 300s;

    # 代理发送的超时时间为300秒
    proxy_send_timeout 300s;

    # 代理读取的超时时间为300秒
    proxy_read_timeout 300s;
}

2.普通代理

	location / {
			proxy_pass http://127.0.0.1:8090;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;

   	}

location/:这是一个location块,使用/表示匹配根路径的请求。也就是说,当有请求到达Nginx服务器的根路径时,这个location块将会起作用。
proxy_pass http://127.0.0.1:8090;:这是一个代理指令,它告诉Nginx将匹配到的请求代理到http://127.0.0.1:8090这个地址上。也就是说,当有请求到达根路径时,Nginx会将该请求转发到本地的http://127.0.0.1:8090地址上进行处理。
proxy_set_header Host$host;:这是一个代理指令,它设置了一个HTTP请求头部。具体来说,它将原始请求的Host头部信息传递给代理服务器。这是为了让代理服务器能够正确处理请求,因为有些服务器可能会根据Host头部来确定要提供的内容。
proxy_set_header X-Real-IP $remote_addr;:这是另一个代理指令,它设置了一个名为X-Real-IP的HTTP请求头部。它将原始请求的客户端IP地址传递给代理服务器,以便代理服务器能够获取到客户端的真实IP地址。
综上所述,这段配置的作用是将根路径的请求代理到本地的http://127.0.0.1:8090地址,并在代理过程中传递一些必要的请求头信息给代理服务器。这样做的目的可能是将根路径的请求转发到后端的应用程序或服务器进行处理。

3.单页应用(SPA)的前端路由配置
location / {
    root   /usr/local/nginx/a/main;
    index  index.html index.htm;
    try_files $uri $uri/ @router;
}

location @router {
    rewrite ^.*$ /index.html last;
}

第一个location / {}块:

此块用于处理所有请求路径。 root
/usr/local/nginx/a/main;指定了根路径的实际文件路径,即/usr/local/nginx/a/main。 index
index.html index.htm;指定了当请求路径为目录时,默认使用的索引文件。 try_files $uri $uri/
@router;是一个重要的指令,它会尝试查找与当前请求路径相匹配的文件。如果找到了对应的文件,则直接返回文件内容;如果找不到文件,则将请求转发到@router命名的location块进行处理。

第二个location @router {}块:

当前面的try_files指令无法找到匹配的文件时,请求会被转发到这个命名的location块。 rewrite ^.*$
/index.html last;将所有请求路径重写为/index.html,并使用last关键字表示停止处理重写后的请求。
这个配置的目的是将根路径的请求(例如http://example.com/)代理到/usr/local/nginx/a/main目录下的index.html文件。而对于前端路由中的其他路径(例如http://example.com/about),由于实际文件不存在,请求会被重写为/index.html,然后由前端应用根据路由进行页面渲染。

这种配置方式常用于单页应用的前端路由,确保前端应用可以正确处理各个路由路径。

4.乱七杂八的配置
server {
    listen       80;
    server_name  abc.info;
    return 301 https://$server_name$request_uri;
    #rewrite ^/(.*) https://$server_name\$1  permanent;	 
    
    location /b {
        proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://a/b;
        proxy_redirect default;
    }
    
    location /b{
        rewrite ^/(.*) https://abc.info/  permanent;
    }
    
    location /b/img {
        proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://a;
        proxy_redirect default;
    }
}

listen 80;表示该服务器块监听80端口,即HTTP请求的默认端口。 server_nameabc.info;设置服务器的名称为abc.info,用于匹配请求的域名。 return 301 https:// s e r v e r n a m e server_name servern?amerequest_uri;是一个重定向指令,将所有HTTP请求重定向到相同的请求路径,但使用HTTPS协议进行访问。 s e r v e r n a m e 表示当前服务器的名称, server_name表示当前服务器的名称, servern?ame表示当前服务器的名称,request_uri表示当前请求的URI。
location /b {}块用于处理以/b开头的请求路径。 proxy_set_header指令用于设置代理请求的头部信息。
proxy_pass指令将请求代理到http://a/b,即将请求转发给后端服务器a的/b路径进行处理。 proxy_redirect
default;指令将默认的代理重定向设置为开启。 location /b {}块用于处理以/b开头的请求路径。 rewrite ^/(.*) https://abc.info/
permanent;将请求重写为https://abc.info/,并使用permanent关键字表示永久重定向。 location /b/img {}块用于处理以/b/img开头的请求路径。 与第4个location块类似,将请求代理到后端服务器a进行处理。
总体而言,这段配置的作用是:
将所有HTTP请求重定向到HTTPS协议进行访问。 根据请求路径的不同,将请求代理到不同的后端服务器或路径进行处理。
设置代理请求的头部信息。

文章来源:https://blog.csdn.net/qq_46058550/article/details/135595770
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。