概述
Nginx安装
安装
tar zxvf nginx-1.2.9.tar.gz#解压nginxcdnginx-1.2.9#进入目录./configure--prefix=/opt/soft/nginx--with-http_stub_status_module--with-http_ssl_module--with-http_realip_module#配置安装模块make install#安装复制代码
--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复制代码
设置开机自启动:
echo"/opt/soft/nginx/sbin/nginx -c /opt/soft/nginx/conf/nginx.conf">> /etc/rc.local复制代码
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; #反向代理到其他站点
}
}
注意: 配置文件下载服务器
server{listen80;server_namefile.download.com;charsetutf-8;location~ ^/(.*)${add_headerContent-Disposition"attachment; filename=$1";#设置headeralias"C:/Robot_Download/$1";#文件的本地位置}}
基于端口
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等方式指向静态资源
}
基于ip
server{listen100.100.100.100:80;server_namelocalhost;location/ {alias/data/html/index.html;#也可使用alias、root等方式指向静态资源}}server{listen100.100.100.101:80;server_namelocalhost;location/ {alias/data/html/index.html;#也可使用alias、root等方式指向静态资源}}
反向代理
主要配置location模块的 proxy_pass
server {
listen 80;
server_name test.b.com;
location / {
proxy_pass http://192.168.0.2; #反向代理到其他应用服务器或web服务器
}
}
负载均衡
主要配置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; #反向代理到其他服务器集合
}
}
**ip_hash:**使用ip_hash策略的负载均衡解决session问题。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可较好地解决session的问题。
location映射规则
alias和root的区别
location /svn/ {
root /data/ftp/;
autoindex on;
}
访问127.0.0.1/svn/a.jpg:则会进入到 /data/ftp/svn/a.jpg
location/svn/ {alias/data/ftp/;autoindexon;}
访问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/;
}
访问:127.0.0.1/proxy/a.jpg:则会请求到:http://127.0.0.1/a.jpg
location/proxy/ {proxy_pass http://127.0.0.1;}
访问: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;
}
“location /xxx/”表示匹配ip:port/xxx,需注意:
能匹配到 test.com/xxx/home.jpg;
不能匹配到 test.com/folder/xxx/home.jpg;
如果需要匹配到后者,应改为:location /folder/xxx/
科普:
一般默认都有location = /(精确匹配),而还有一种是 location /(模糊匹配)。
两者的区别是:模糊匹配就算匹配到也会一直匹配下去,而精确匹配不会。
例: 如上例中,把location = /换成location /,那么请求 112.74.55.239/svn/:
先会匹配 /,请求的物理路径变成了:/usr/local/nginx/html
继续匹配/svn/,实际访问的物理路径变成了: /usr/local/nginx/html/data/svn/
rewrite
location~ .php${rewirte"^/php/(.*)$"http://localhost:8090/$1}
将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参数如下:
last
结束当前的请求处理,用替换后的URI重新匹配location;
可理解为重写(rewrite)后,发起了一个新请求,进入server模块,匹配location;
如果重新匹配循环的次数超过10次,nginx会返回500错误;
返回302 http状态码 ;
浏览器地址栏显示重定向后的url
break
结束当前的请求处理,使用当前资源,不在执行location里余下的语句;
返回302 http状态码 ;
浏览器地址栏显示重定向后的url
redirect
临时跳转,返回302 http状态码;
浏览器地址栏显示重定向后的url
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;
解决request.getScheme()获取不到真实协议
proxy_set_headerX-Forwarded-Proto$scheme;
websocket配置
map $http_upgrade $connection_upgrade {
default upgrade;
}
那么,作为一名Java程序员,怎样努力才能快速成长为一名高级的程序员或者架构师,或者说一名优秀的高级工程师或架构师应该有怎样的技术知识体系,这不仅是一个刚刚踏入职场的初级程序员,也是工作三五年之后开始迷茫的老程序员,都必须要面对和想明白的问题。为了帮助大家少走弯路,我总结出一个Java程序员的工作2-5年成长路线图。需要相关资料可以加v:xiaoyanya_1获取哦,点击链接Java资料免费分享涉及的知识点(Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术)。
一:常见模式与工具
学习Java技术体系,设计模式,流行的框架与组件是必不可少的:
常见的设计模式,编码必备
Spring5,做应用必不可少的最新框架
MyBatis,玩数据库必不可少的组件
二:工程化与工具
工欲善其事必先利其器,不管是小白,还是资深开发,玩Java技术体系,选择好的工具,提升开发效率和团队协作效率,是必不可少的:
Maven,项目管理
Jenkins,持续集成
Sonar,代码质量管理
Git,版本管理
三:分布式架构
高并发,高可用,海量数据,没有分布式的架构知识肯定是玩不转的:
分布式架构原理
分布式架构策略
分布式中间件
分布式架构实战
四:微服务架构
业务越来越复杂,服务分层,微服务架构是架构升级的必由之路,Java技术体系,和微服务相关的技术有哪些呢?
微服务框架
Spring Clou
Docker与虚拟化
微服务架构
五:性能优化
任何脱离细节的ppt架构师都是耍流氓,向上能运筹帷幄,向下能解决一线性能问题,Java技术体系,需要了解:
性能指标体系
JVM调优
Web调优
DB调优
六:底层知识
从架构设计,到应用层调优,再深入了解底层原理,扎实的Java基本功才能让自己变为扫地神僧:
内存模型
并发模式
线程模型
锁细节
为了掌握这些技能,开发人员需能够自我激励,主动学习新技术,并在职业生涯中给自己扣上很多帽子。 继而不断挑战自我,然后更好地解决问题,这就是编程的本质。 知识很重要,在某些复杂问题的情况下更是如此。在变化如此之快的IT技术领域中,知识的获取在任何时候比我们已会的技能更为重要。
Nginx依旧有很多细节和设计值得去深究学习,本篇Nginx先总结到此,后续有了更深入的了解,也会继续分享给大家。
最后
以上就是繁荣老虎为你收集整理的Nginx使用总结Nginx安装负载均衡的全部内容,希望文章能够帮你解决Nginx使用总结Nginx安装负载均衡所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复