Linux 安装和部署服务:nginx和Openresty - IV,nginx常用配置
最编程
2024-10-19 07:22:45
...
4.1 nginx 基础配置
-
nginx 代理的简单配置
server { listen 80; server_name localhost; location / { root /usr/local/web/dist; index index.html index.htm; # 如果配置的是history路由需开启此项 # try_files $uri $uri/ /index.html; } # 静态资源目录,在对应目录先建好文件夹 location /admintest { alias /usr/local/web/admin/dist; index index.html index.htm; } #代理node服务 location /api { proxy_pass http://127.0.0.1:3002; } }
-
配置说明:root 指令 和 alias 指令
-
root指令
:用于指定服务器文件的根目录,nginx会将location后面的uri与root指令指定的路径拼接起来,作为最终的文件路径。 -
alias指令
:用于指定服务器文件的别名,nginx会将location后面的uri替换为alias指令指定的路径,作为最终的文件路径。
# nginx配置示例: location /dist/ { root /opt/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } # root是拼接: 当请求/dist/static/css/style.css时, nginx会将其映射到/opt/nginx/html/dist/static/css/style.css文件上 # alias是替换: 当请求/dist/static/css/style.css时, nginx会将其映射到/opt/nginx/html/static/css/style.css文件上
-
4.2 nginx 重定向
-
nginx 重定向配置
# if按照格式书写,括号前后的空格必须带着 server { listen 80; # listen 443; server_name www.xxx.com xxx.com; if ($host != 'www.xxx.com') { rewrite ^/(.*)$ http://www.xxx.com/$1 permanent; } } server { server_name xxx.com; rewrite ^(.*)$ http://www.xxx.com$1 permanent; } # (提前配置好SSL证书) server { listen 80; server_name www.xxx.com xxx.com; rewrite ^(.*)$ https://$host$1; }
4.3 nginx 跨域访问
-
nginx 跨域访问配置
location / { # 允许跨域的请求,可以自定义变量$http_origin,*表示所有 add_header 'Access-Control-Allow-Origin' *; # 允许携带cookie请求 add_header 'Access-Control-Allow-Credentials' 'true'; # 允许跨域请求的方法:GET,POST,OPTIONS,PUT add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT'; # 允许请求时携带的头部信息,*表示所有 add_header 'Access-Control-Allow-Headers' *; # 允许发送按段获取资源的请求 add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; # 一定要有!!!否则Post请求无法进行跨域! # 在发送Post跨域请求前,会以Options方式发送预检请求,服务器接受时才会正式请求 if ($request_method = 'OPTIONS') { add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain; charset=utf-8'; add_header 'Content-Length' 0; # 对于Options方式的请求返回204,表示接受跨域请求 return 204; } }
4.4 nginx 防盗链
-
nginx 静态资源防盗链配置
# 配置基础语法 valid_referers none | blocked | server_names | string ...; 1. none:表示接受没有Referer字段的HTTP请求访问 2. blocked:表示允许http://或https//以外的请求访问 3. server_names:资源的白名单,这里可以指定允许访问的域名 4. string:可自定义字符串,支配通配符、正则表达式写法 # 在动静分离的location中开启防盗链机制 location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){ # 最后面的值在上线前可配置为允许的域名地址 valid_referers blocked 192.168.12.129; if ($invalid_referer) { # 可以配置成返回一张禁止盗取的图片 # rewrite ^/ http://xx.xx.com/NO.jpg; # 也可直接返回403 return 403; } root /soft/nginx/static_resources; expires 7d; }
说明: nginx 也有防盗链的相关模块
ngx_http_accesskey_module
4.5 nginx 证书配置
-
nginx 配置 ssl 证书 及相关 https 的配置
# ----------HTTPS配置----------- server { # 监听HTTPS默认的443端口 listen 443; # 配置自己项目的域名 server_name www.xxx.com; # 打开SSL加密传输 ssl on; # 输入域名后,首页文件所在的目录 root html; # 配置首页的文件名 index index.html index.htm index.jsp index.ftl; # 配置自己下载的数字证书 ssl_certificate certificate/xxx.pem; # 配置自己下载的服务器私钥 ssl_certificate_key certificate/xxx.key; ssl_session_cache shared:SSL:1m; # 停止通信时,加密会话的有效期,在该时间段内不需要重新交换密钥 ssl_session_timeout 5m; # TLS握手时,服务器采用的密码套件 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 服务器支持的TLS版本 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # 开启由服务器决定采用的密码套件 ssl_prefer_server_ciphers on; location / { .... } } # ---------HTTP请求转HTTPS------------- server { # 监听HTTP默认的80端口 listen 80; # 如果80端口出现访问该域名的请求 server_name www.xxx.com; # 将请求改写为HTTPS(这里写你配置了HTTPS的域名) rewrite ^(.*)$ https://www.xxx.com; }
4.6 nginx 动静分离
-
nginx 配置动静分离
# 在项目上线部署时,这些静态资源会img|html|js|css...一起打成包 # 那这对于后端服务器的压力是尤为巨大的 # 1. 先在部署Nginx的机器,Nginx目录下创建一个目录static_resources mkdir static_resources # 2. 将项目中所有的静态资源全部拷贝到该目录下,而后将项目中的静态资源移除重新打包 # 3. 修改一下nginx.conf的配置,增加一条location匹配规则 location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){ root /soft/nginx/static_resources; expires 7d; } # 也可以将静态资源上传到文件服务器中,然后location中配置upstream指向
4.7 nginx 资源压缩
-
nginx 资源压缩配置
# 在Nginx也提供了三个支持资源压缩的模块 ngx_http_gzip_module ngx_http_gzip_static_module ngx_http_gunzip_module # 相关配置如下 http{ # 开启压缩机制 gzip on; # 指定会被压缩的文件类型(也可自己配置其他类型) gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png; # 设置压缩级别,越高资源消耗越大,但压缩效果越好 gzip_comp_level 5; # 在头部中添加Vary: Accept-Encoding(建议开启) gzip_vary on; # 处理压缩请求的缓冲区数量和大小 gzip_buffers 16 8k; # 对于不支持压缩功能的客户端请求不开启压缩机制 gzip_disable "MSIE [1-6]\."; # 低版本的IE浏览器不支持压缩 # 设置压缩响应所支持的HTTP最低版本 gzip_http_version 1.1; # 设置触发压缩的最小阈值 gzip_min_length 2k; # 关闭对后端服务器的响应结果进行压缩 gzip_proxied off; }
4.8 nginx 负载均衡
-
nginx 反向代理-负载均衡
upstream myserver{ # 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2 server xxx:8080 weight=100 max_fails=2 fail_timeout=30s; server xxx:8090 weight=200 max_fails=2 fail_timeout=30s; # 这里的IP请配置成你WEB服务所在的机器IP } server { location / { root html; index index.html index.htm index.ftl; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 请求交给名为nginx_boot的upstream上 proxy_pass http://myserver; } }
4.9 nginx 代理访问
-
场景说明: 在某些政务单位或机构,内部使用的是局域网即所谓的内网环境,无法直接访问外网即互联网环境,访问外网必须通过指定的出口服务器,即可以访问外网的服务器,才能正常访问互联网。现需要在内网环境访问互联网的域名地址,如访问www.baidu.com,则需要通过代理 IP 和端口才能去访问外网的域名。
-
配置说明: 内网通过指定服务器的
172.18.36.20:80
访问外网域名api.server.com
-
正向代理
: 正向代理代表客户端向服务器发送请求, 隐藏客户端身份 -
反向代理
: 反向代理代表服务器向客户端发送响应, 隐藏服务器身份
# 根据使用场景, 我们的PC电脑接入的是政务机构的局域网(内网)环境, 要想访问外网域名api.server.com, 可以在内网环境的电脑主机通过浏览器访问172.18.36.20这台服务器的80端口从而访问到域名网址, 这种方式向互联网隐藏了客户端的身份信息, 属于正向代理,说明:此处的api.server.com只是个虚构的域名。 # NGINX配置 server { listen 80; server_name 172.18.36.20; # 访问http://172.18.36.20:80/代理访问https:/api.server.com:443 location / { proxy_send_timeout 600; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_redirect off; proxy_set_header Host api.server.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://api.server.com:443/; add_header Access-Control-Allow-Origin *; } # 其他示例:访问http://172.18.36.20:80/map代理访问https://api.hlw.com:443/map location /map { proxy_send_timeout 600; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_redirect off; proxy_set_header Host api.hlw.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://api.hlw.com:443/map; add_header Access-Control-Allow-Origin *; } }
-
5.0 nginx 配置简介
-
nginx 基础配置及说明
# user nobody;#运行nginx的默认账号 # nginx进程数,建议设置为等于CPU总核心数。 worker_processes 1; # 事件区块开始 events { # 单个进程最大链接数(最大连接数=连接数*进程数) # 根据硬件调整,与前面工作进程配合起来用,尽量大,但别把CPU跑到100%就行,每个进程允许的最多连接数,理论上为每台nginx服务器的最大连接数 worker_connections 1024; } # 设定http服务器,利用它的反向代理功能提供负载均衡支持 http { # include:导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中。 include mime.types; # 默认文件类型 default_type application/octet-stream; # 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设置为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载,注意:如果图片显示不正常把这个改成off # sendfile指令指定,nginx是否调用sendfile函数(zero copy方式)来输出文件,对于普通应用,必须设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime sendfile on; # 长连接超时事件,单位是秒 keepalive_timeout 65; # 第一个server区块开始,表示一个独立的虚拟主机站点 server { # 提供服务的端口,默认80 listen 80; # 提供服务的域名主机名 server_name localhost; # 对 “/” 启动反向代理,第一个location区块开始 location / { root html; # 服务默认启动目录,可以改成指定的目录位置 index index.html index.htm; # 默认的首页文件,多个用空格分开 } # 错误页面路由 # 出现对应的http状态码是,使用50x.html回应客户 error_page 500 502 503 504 /50x.html; # location区块开始,访问50x.html location = /50x.html { # 指定对应的站点目录为html root html; } } }
-
nginx 其他配置及说明
$ remote_addr 与 $ http_x_forwarded_for 用以记录客户端的ip地址 $ remote_user:用来记录客户端用户名称 $ time_local: 用来记录访问时间与时区 $ request: 用来记录请求的url与http协议 $ status: 用来记录请求状态;成功是200 $ body_bytes_sent:记录发送给客户端文件主体内容大小 $ http_referer:用来记录从那个页面链接访问过来的 $ http_user_agent:记录客户端浏览器的相关信息
上一篇: linux 系统的 jar 启动脚本
下一篇: Raid 磁盘类型及其特性
推荐阅读
-
Linux 安装和部署服务:nginx和Openresty - IV,nginx常用配置
-
配置 WSGI 服务器(Gunicorn)和 Nginx 反向代理服务器以部署 Flask 项目
-
如何在腾讯云服务器上安装和配置nginx?
-
CentOS 7安装ipvsadm和Nginx,并进行基本配置与测试 下面是重写后的段落: 1. 关闭防火墙 2. 在浏览器中输入服务器IP地址并访问 3. 修改网页内容以区分不同的服务器 4. 配置lvs/nat,使用自定义的脚本 5. 检查ipvsadm设置的规则 6. 关闭防火墙 7. 测试LVS效果。
-
在 CentOS 7 上安装和配置LNMP环境(Linux+Nginx+MySQL+PHP)
-
Nginx:部署和配置细节(Linux)
-
Nginx 服务器安装和配置文件
-
玩转服务器] CentOS 安装 nginx 和部署网站
-
详述在Linux中安装和配置Nginx的步骤
-
简易指南:在Linux系统上安装和配置Nginx环境