nginx配置http及https

nginx配置http及https

现在日常工作中的项目大多数都是采用前后端分离,就用到了nginx进行反向代理、处理静态资源等;因此,记录整理了nginx一些常用的配置;

1.动静分离

将动态请求和静态请求分开处理;通常是将动态请求转发到应用服务器进行处理,静态请求由nginx直接提供;

bash 复制代码
server {
    listen 80;
    location / {
    	#指定静态资源
        root /data/test/test-front/dist/;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
    location /prod-api/ {
    	#指定动态请求的处理
        proxy_pass http://127.0.0.1:8000/;
    }
}

2.负载均衡

将客户端请求均匀分配到多个服务器上,提高系统的响应速度及可用性;

bash 复制代码
http {
    upstream backend {
    	#配置负载均衡服务器组
    	#有端口需要把端口带上server www.xxxxx.com:80;
        server www.xxxxx1.com;
        server www.xxxxx2.com;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

提示:可以对负载均衡服务器组里面的节点设置权重、尝试连接主机失败次数、失败次数后下次检查的间隔时间、热备、标记为不可用等;
weight=1:设置服务器权重,默认1,权重值越大,接受的请求比例越大;
max_fails=1:nginx尝试连接失败的次数,超过次数就会将请求转发给其他正常工作的服务器;
fail_timeout=10s:设置尝试连接失败后,下次检查的间隔时间,默认10s;
backup:热备,将服务器作为备用服务器,其他主服务器全部宕机后就会像他转发请求;
down:标记服务器为不可用;
例如:
server www.xxxxx.com weight=1 max_fails=1 fails_timeout=10s;<----#默认配置
server www.xxxxx.com backup;
server www.xxxxx.com down;

3.配置https

bash 复制代码
server {
    listen       443 ssl;
    server_name  www.xxxxx.com;
    
    #指定ssl的crt文件和key文件路径;
    ssl_certificate      /data/test/ssl/xxxxxx.crt;
    ssl_certificate_key  /data/test/ssl/xxxxxx.key;
    
    #设置Nginx的SSL/TLS片段优化加强HTTPS安全性和性能;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    
    #强制转htttps
    proxy_redirect http:// $scheme://;
    
   #设置请求体、文件大小限制,默认1m;非必选;
    client_max_body_size 50m;
    
location / {
        root   /data/test/test-front/dist/;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
}

 location /prod-api/ {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8000/;
}

4.请求重定向

1.return简单重定向

如:访问www.xxxxx.com时,返回一个301的请求,并重定向到http://www.xxxxx.com:8000,保留其参数;
www.xxxxx.com:源地址;
http://www.xxxxx.com:8000/:目标地址;
?$args:表示保留参数;

bash 复制代码
server {
    listen 80;
    server_name www.xxxxx.com;

    location / {
        return 301 http://www.xxxxx.com:8000/?$args;
    }
}

2.rewrite根据规则进行重定向

如:访问www.xxxxx.com时,进行规则匹配^/(.*),将符合规则的重定到http://www.xxxxx.com:8000,保留其参数;
www.xxxxx.com:源地址;
^/(.*)$:匹配url规则(任何url路径),并将匹配到的内容存储在$1中;
http://www.xxxxx.com:8000/:目标地址;
?$args:表示保留参数;
permanent:表示永久重定向;

bash 复制代码
server {
    listen 80;
    server_name www.xxxxx.com;

    location / {
        rewrite ^/(.*)$ http://www.xxxxx.com:8000/$1?$args permanent;
    }
}

5.常用参数配置介绍

client_max_body_size:#设置请求体、文件大小限制默认1m,如:client_max_body_size 50m;
client_header_timeout:默认值60s,client发送一个请求头的超时时间,如:client_header_timeout 60s;
client_body_timeout:默认值60s,设置请求体的读取超时时间,如:client_header_timeout 60s;
proxy_connect_timeout:默认60s,设置的连接超时时间,如:proxy_connect_timeout 60s;
proxy_read_timeout 600s;:默认60s,设置nginx等待请求响应的时间,如:proxy_read_timeout 60s;
proxy_send_timeout:默认60s,设置发送请求给服务器的超时时间,如:proxy_send_timeout 60s
proxy_set_header Host $http_host;:设置转发请求的请求头host字段为,客户端主机;
proxy_set_header X-Real-IP $remote_addr;:设置转发请求的请求头X-Real-IP字段为,客户端真实ip(准确的说是上一节点的ip);
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:设置X-Forwarded-For字段,用来记录原始ip地址;
proxy_set_header X-Forwarded-Proto $scheme;:将请求重定向为指定协议,如:https配置中,即是强制转https;

以上参数可以配置在,http、server、location等块中,区别是不同块作用域不同;

相关推荐
爱学测试的李木子2 小时前
Jmeter —— jmeter利用取样器中http发送请求
网络协议·jmeter·http
清山博客3 小时前
Nginx 防止IP伪造,绕过IP限制
linux·服务器·nginx
Looper033112 小时前
【Shell 脚本实现 HTTP 请求的接收、解析、处理逻辑】
网络·网络协议·http
eddieHoo12 小时前
HTTP、RPC
网络协议·http·rpc
不像程序员的程序媛13 小时前
记录下nginx接口代理配置问题
运维·服务器·nginx
楠丶14 小时前
无界(wujie)微前端项目搭建,nginx线上部署,pnpm一键安装依赖、启动应用,git代码仓库存放方式
前端·git·nginx·前端框架
Jackey_Song_Odd15 小时前
[node.js] [HTTP/S] 实现 requests 发起 HTTP/S/1.1/2.0 请求
网络协议·http·node.js
哎呦,帅小伙哦16 小时前
brynet源码阅读——http组件和wrapper组件
网络·网络协议·http
苹果醋320 小时前
Springboot入门教程系列HelloWorld
java·运维·spring boot·mysql·nginx