nginx常用配置-/root/alias/try_files/index/代理/跨域/https

Nginx配置与使用详解:静态处理、代理、负载均衡与跨域设置

nginx简介

     Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。和apache一样,都是web服务器软件,因为其性能优异,所以被广大运维喜欢。又因为nginx是一个轻量级的web服务器,相比apache来说资源消耗更低。想在手机看的点击 nginx配置有了这篇就稳了

图片

作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应

作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。

nginx和apache对比:静态文件处理能力:nginx高于apache,资源消耗:nginx优于apache,因为nginx是异步处理模型,只需要几个进程就能够处理大量在线请求,而apache 2.4仍然是进程模型或者线程模型,即仍然采用大量线程来处理大量在线请求。

nginx的root/alias/try_files/index

1、root

    root和alias都可以定义在location模块中,都是用来指定请求资源的真实路径,比如:

location /i/ {    root /data/web/;}

     请求 http://localhost/i/index.html 这个地址时,那么在服务器里面对应的真正的资源是 /data/web/i/index.html文件

2、alias

   alias 正如其名,alias指定的路径是location的别名,不管location的值怎么写,资源的 真实路径都是 alias 指定的路径 ,比如:

location /i/ {    alias /data/web/;}

同样请求 http://localhost/i/top.gif 时,在服务器查找的资源路径是:/data/web/top.gif

3、try_files

location /i/ {    alias /data/web/;  try_files $uri $uri/ /i/index.html;}

    当用户请求 http://localhost/i时,这里的 $uri 就是 /i。try_files 会到硬盘里尝试找这个文件。如果存在名为 /$root/i(其中 $root 是项目代码安装目录)的文件,就直接把这个文件的内容发送给用户。显然,目录中没有叫 i的文件。然后就看 $uri/,增加了一个 /,也就是看有没有名为 /$root/i/ 的目录。又找不到,就会 fall back 到 try_files 的最后一个选项 /i/index.html,发起一个内部 “子请求”,也就是相当于 nginx 发起一个 HTTP 请求到http://localhost/i/index.html。

例如:

图片

图片

http://192.168.244.129/test/project1/  将访问pj1目录下index.html页面

http://192.168.244.129/test/project1/a 将访问a目录下的index.html

http://192.168.244.129/test/project1/b,http://192.168.244.129/test/project1/b 访问目录下/test/project1/index2.html;

我们可以看到没有指定页面时默认访问是index.html,当匹配不到时根据try_files规则将转到index2.html

示例二:

server {    root /www/nginx;    index index.html index.jsp;    charset utf-8;    access_log /var/log/nginx/host.access.log main;    error_log /var/log/nginx/host.error.log error;    location ^~ /test/ {        index index.html;        try_files /2.html /1.html /test/test2.html @bd;    }    location @bd {        rewrite ^/(.*)$ http://www.google.com;    }}

      / 表示 root 所在的目录,1.html 文件前需添加 /,否则请求的格式为 /www/nginx1.html。以 /test/ 开头的 URL 将会匹配 location ^~ /test/ { ... },然后 try_files 指令会分别查找/www/nginx/2.html、/www/nginx/1.html、/test/test2.html 以及 @bd。若前三个 HTML 文件均不存在,则会匹配(内部重定向) location @bd { ... }。

4、index

     默认文件,也就是当找不到文件的时候的一个默认的文件,可以配置多个。具体的用法稍后说,请先记住这个东西当你找不到其他合适的东西,默认给你分配的。

# 项目1location /test/project1{  alias /home/soft/web/pj1/;  try_files $uri $uri/ /test/project1/index2.html;  index index.html;}

如上默认页面我们指定为index.html,也可指定为其它页面。

nginx代理配置

    nginx做代理转发这个是nginx常用的功能之一,用来代理后端接口服务。

    在http节点下,使用upstream配置服务地址,使用server的location配置代理映射。

upstream my_server {  server 10.0.0.2:8080;  keepalive 2000;}server { listen 80;  server_name 10.0.0.1;  client_max_body_size 1024M; location /my/ { proxy_pass http://my_server/; proxy_set_header Host $host:$server_port; }}

    通过该配置,访问nginx地址http://10.0.0.1:80/my的请求会被转发到my_server服务地址http://10.0.0.2:8080/。proxy_pass 访问路径带斜杠时,绝对路径,将用pass转发,需要注意的是,如果按照如下配置:

upstream my_server {                                                             server 10.0.0.2:8080;                                                    keepalive 2000;}server {    listen       80;                                                             server_name  10.0.0.1;                                                   client_max_body_size 1024M;    location /my/ {        proxy_pass http://my_server;        proxy_set_header Host $host:$server_port;    }}

     那么,访问nginx地址http://10.0.0.1:80/my的请求会被转发到my_server服务地址http://10.0.0.2:8080/my。proxy_pass 访问路径不带斜杠时,相对路径,将用原路径转发。

nginx跨越访问配置

    在做页面开发时,有时会在前端页面发送一些ajax请求,如果ajax请求允许其他站点的请求,则服务器端需要设置允许跨域请求,在nginx服务器下,怎么配置允许跨域?看下面介绍。

http {  add_header Access-Control-Allow-Origin "*";  add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";  add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";  server {     listen 80;     server_name localhost;     ...     error_page 500 502 503 504 /50x.html;     location = /50x.html {       root html;     }  }}

nginx的https配置

      HTTP协议传输的数据都是未加密的,因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。因此将原来的http换成了https链接。自签名由openssl生产,正式的可由阿里云生成。

server {    listen       8091 ssl;    server_name  test.weixin.com;    #ssl_certificate      cert.pem;    #ssl_certificate_key  cert.key;    ssl_certificate      cert.crt;    ssl_certificate_key  cert.key;    ssl_session_cache    shared:SSL:1m;    ssl_session_timeout  5m;    ssl_ciphers  HIGH:!aNULL:!MD5;    ssl_prefer_server_ciphers  on;    location / {          root   html;          index  index.html index.htm;     }}

nginx证书pem和crt证书都支持,加入证书后访问https://localhost:8091

如果觉得文章能帮到您,欢迎关注微信公众号:“蓝天Java大数据” ,共同进步!

server { #sz3_jdk17 listen 30000; server_name sz3_jdk17.qctc.com; add_header X-Frame-Options SAMEORIGIN; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; location / { root /home/nginx/sz3_jdk17/latest/beta; try_files $uri $uri/ /index.html; } #location = /index.html { # add_header Cache-Control "no-cache,no-store"; # alias /home/nginx/sz3_jdk17/latest/beta/index.html; #} location /xxlstatic { alias /home/nginx/sz3_jdk17/latest/beta/xxlstatic; } location /static/sz_master/ { gzip on; gzip_min_length 102480; gzip_buffers 4 8k; gzip_types application/javascript text/css; alias /home/nginx/sz3_jdk17/latest/sz_master/; } location /resource { #alias /mnt/nas/nginx_big_source/szxndc/model; alias /home/nginx/sz3_jdk17/latest/model; autoindex on; autoindex_localtime on; } #location / { # alias /home/nginx/sz3_jdk17/latest/beta; # error_page 405 =200 /index.html; # try_files $uri $uri/ /index.html last; #} location /gateway { client_max_body_size 20m; client_body_buffer_size 128k; proxy_pass http://192.168.1.95:10002; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-Port $remote_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; #必须配这个转发 } location =/WEB-INF/web.xml { try_files $uri $uri/ /index.html; } #xxl location /xxl { proxy_pass http://192.168.1.95:10006/xxl; } } server { #sz4_jdk17 listen 30000; server_name sz4_jdk17.qctc.com; add_header X-Frame-Options SAMEORIGIN; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; location / { root /home/nginx/sz4_jdk17/latest/beta; try_files $uri $uri/ /index.html; } #location = /index.html { # add_header Cache-Control "no-cache,no-store"; # alias /home/nginx/sz4_jdk17/latest/beta/index.html; #} location /xxlstatic { alias /home/nginx/sz4_jdk17/latest/beta/xxlstatic; } location /static/sz_master/ { gzip on; gzip_min_length 102480; gzip_buffers 4 8k; gzip_types application/javascript text/css; alias /home/nginx/sz3_jdk17/latest/sz_master/; } location /resource { if ( !-f $request_filename ) { rewrite (.*) //404.png; } alias /home/nginx/sz3_jdk17/latest/model; autoindex on; autoindex_localtime on; } #location / { # alias /home/nginx/sz4_jdk17/latest/beta; # error_page 405 =200 /index.html; # try_files $uri $uri/ /index.html last; #} location /gateway { client_max_body_size 20m; client_body_buffer_size 128k; proxy_pass http://192.168.1.96:10002; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-Port $remote_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; #必须配这个转发 } location =/WEB-INF/web.xml { try_files $uri $uri/ /index.html; } #xxl location /xxl { proxy_pass http://192.168.1.96:10006/xxl; } } 有问题吗
08-30
user root; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # HTTP重定向到HTTPS server { listen 80; server_name 192.168.14.16; return 301 https://$host$request_uri; # 强制HTTPS重定向 } server { listen 443 ssl; # 启用SSL server_name 192.168.14.16; client_max_body_size 0; # SSL证书配置 ssl_certificate /etc/nginx/ssl/ssl.crt; # 证书路径 ssl_certificate_key /etc/nginx/ssl/ssl.key; # 私钥路径 ssl_protocols TLSv1.2 TLSv1.3; # 安全协议版本 ssl_ciphers HIGH:!aNULL:!MD5; # 加密套件 ssl_session_cache shared:SSL:10m; # SSL会话缓存 ssl_session_timeout 10m; # 会话超时 # 前端静态资源 location / { root /home/gg/projects/gg-ui; try_files $uri $uri/ /index.html; index index.html index.htm; } # 后端API代理(保持HTTP协议) location /prod-api/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 告知后端使用HTTPS proxy_set_header X-Forwarded-Proto https; # 保持HTTP协议访问后端网关 proxy_pass http://gg-pz:3099/; #proxy_pass http://192.168.14.16:9000/; proxy_read_timeout 600s; } # 新增 WebSocket 代理 location /gg-pz/websocket/ { # 后端 WebSocket 地址 proxy_pass http://192.168.14.16:3099/gg-pz/websocket/; # 后端 WebSocket 地址 # WebSocket 必需的头信息 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 透传客户端信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; # 超时设置(WebSocket 需要长连接) proxy_read_timeout 86400s; # 24 小时 proxy_send_timeout 86400s; proxy_connect_timeout 300s; } # 错误页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # JS文件保护 location /static/js/ { if ($http_referer = "") { return 403; } alias /home/gg/projects/gg-ui/static/js/; try_files $uri =404; } } } 这是我的nginx配置,前端现在访问后端是通过ip调用接口,我想通过nginx代理,如何修改当前配置,帮我生成完整配置
07-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值