1. 首页

我的Nginx使用总结

Nginx安装

安装


tar zxvf nginx-1.2.9.tar.gz #解压nginx cd nginx-1.2.9 #进入目录 ./configure --prefix=/opt/soft/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module #配置安装模块 make install #安装 //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

--prefix:指定安装目录,默认的安装目录是/usr/local/nginx;

--with-http_ssl_module:安装https服务模块

启动


/opt/soft/nginx/sbin/nginx /opt/soft/nginx/sbin/nginx -s stop # fast shutdown /opt/soft/nginx/sbin/nginx -s quit # graceful shutdown /opt/soft/nginx/sbin/nginx -s reload # reloading the configuration file /opt/soft/nginx/sbin/nginx -s reopen # reopening the log files //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

设置开机自启动:


echo "/opt/soft/nginx/sbin/nginx -c /opt/soft/nginx/conf/nginx.conf" >> /etc/rc.local //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

Nignx配置虚拟主机、反向代理、负载均衡

虚拟主机

主要配置server模块的 listen 和 server_name

基于域名


server { listen 80; server_name test.a.com; location / { proxy_pass http://192.168.0.1; #反向代理到其他站点 } } server { listen 80; server_name test.b.com; location / { proxy_pass http://192.168.0.2; #反向代理到其他站点 } } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

注意: 配置文件下载服务器


server { listen 80; server_name file.download.com; charset utf-8; location ~ ^/(.*)$ { add_header Content-Disposition "attachment; filename=$1"; #设置header alias "C:/Robot_Download/$1"; #文件的本地位置 } } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

基于端口


server { listen 80; server_name localhost; alias /data/html/index.html; #也可使用root、location等方式指向静态资源 } server { listen 81; server_name localhost; root /data/html/index.html; #也可使用alias、location等方式指向静态资源 } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

基于ip


server { listen 100.100.100.100:80; server_name localhost; location / { alias /data/html/index.html; #也可使用alias、root等方式指向静态资源 } } server { listen 100.100.100.101:80; server_name localhost; location / { alias /data/html/index.html; #也可使用alias、root等方式指向静态资源 } } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

反向代理

主要配置location模块的 proxy_pass


server { listen 80; server_name test.b.com; location / { proxy_pass http://192.168.0.2; #反向代理到其他应用服务器或web服务器 } } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

负载均衡

主要配置upstream和location模块的proxy_pass


upstream tomcat_server_pool{ ip_hash; server 127.0.0.1:8090 weight=10; #设置访问权重,权重越高越容易被访问 server 127.0.0.1:8100 weight=10; server 127.0.0.1:8110 weight=7; } server { listen 80; server_name test.b.com; location / { proxy_pass http://tomcat_server_pool; #反向代理到其他服务器集合 } } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

**ip_hash:**使用ip_hash策略的负载均衡解决session问题。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可较好地解决session的问题。

location映射规则

alias和root的区别

Js中文网 – 前端进阶资源教程 www.javascriptC.com,typescript 中文文档
一个帮助开发者成长的社区,你想要的,在这里都能找到


location /svn/ { root /data/ftp/; autoindex on; } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

访问127.0.0.1/svn/a.jpg:则会进入到 /data/ftp/svn/a.jpg


location /svn/ { alias /data/ftp/; autoindex on; } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

访问127.0.0.1/svn/a.jpg:则会进入到 /data/ftp/a.jpg

proxy_pass的url是否存在 / 的区别

注意:alias和root后的url都是要加/的


location /proxy/ { proxy_pass http://127.0.0.1/; } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

访问:127.0.0.1/proxy/a.jpg:则会请求到:http://127.0.0.1/a.jpg


location /proxy/ { proxy_pass http://127.0.0.1; } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

访问:127.0.0.1/proxy/a.jpg:则会请求到:http://127.0.0.1/proxy/a.jpg

“location /xxx/” 与“location ^~ /xxx/”区别


location = / { #表示匹配访问根目录 root html; #当前安装目录下的html,/html则表示服务器根目录下的html index index.html index.htm; } location /svn/ { #表示匹配ip:port/svn/ root /data/; autoindex on; } } location ^~ /svn/ { #表示只要含有svn/就会被匹配 root /data/; autoindex on; } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

“location /xxx/”表示匹配ip:port/xxx,需注意:

  1. 能匹配到 test.com/xxx/home.jpg;
  2. 不能匹配到 test.com/folder/xxx/home.jpg;
  3. 如果需要匹配到后者,应改为:location /folder/xxx/

科普:

一般默认都有location = /(精确匹配),而还有一种是 location /(模糊匹配)

两者的区别是:模糊匹配就算匹配到也会一直匹配下去,而精确匹配不会。

例: 如上例中,把location = /换成location /,那么请求 112.74.55.239/svn/

  1. 先会匹配 /,请求的物理路径变成了:/usr/local/nginx/html
  2. 继续匹配/svn/,实际访问的物理路径变成了: /usr/local/nginx/html/data/svn/

rewrite


location ~ \.php${ rewirte "^/php/(.*)$" http://localhost:8090/$1 } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列
  • localhost/php/test.php重定向到localhost:8090/test.php。如果正则表达式(regex)匹配到了请求的URI(request URI),这个URI会被后面的replacement替换
  • 如果正则表达式(regex)里包含“}” or “;”字符,需要用单引号或者双引号把正则表达式引起来
  • 如果replacement字符串里有新的request参数,那么之前的参数会附加到其后面,如果要避免这种情况,那就在replacement字符串后面加上“?”,eg: rewrite ^/users/(.*)$ /show?user=$1? last;=

可选的flag参数如下:

  1. last
  • 结束当前的请求处理,用替换后的URI重新匹配location;
  • 可理解为重写(rewrite)后,发起了一个新请求,进入server模块,匹配location;
  • 如果重新匹配循环的次数超过10次,nginx会返回500错误;
  • 返回302 http状态码 ;
  • 浏览器地址栏显示重定向后的url
  1. break
  • 结束当前的请求处理,使用当前资源,不在执行location里余下的语句;
  • 返回302 http状态码 ;
  • 浏览器地址栏显示重定向后的url
  1. redirect
  • 临时跳转,返回302 http状态码;
  • 浏览器地址栏显示重定向后的url
  1. permanent
  • 永久跳转,返回301 http状态码;
  • 浏览器地址栏显示重定向后的url

常用配置

支持后端获取真实客户端IP,而不是该代理的IP


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; //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

解决request.getScheme()获取不到真实协议


proxy_set_header X-Forwarded-Proto $scheme; //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

websocket配置


map $http_upgrade $connection_upgrade { default upgrade; '' close; } //JS中文网 – 前端进阶资源分享 https://www.javascriptc.com/ 趣聊CSS系列

作者:localhost02
链接:https://juejin.im/post/6844903745378058253

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:我的Nginx使用总结

链接:https://www.javascriptc.com/4234.html

« LeetCode 100. 相同的树
Jenkins流水线部署maven不同模块服务到不同服务器运行»
Flutter 中文教程资源

相关推荐

QR code