nginx学习笔记,
nginx学习笔记,
nginx学习笔记
(一)nginx命令
nginx -s stop #直接关闭
如果无法关闭
在linux下使用:ps -ef |grep nginx找到主进程kill掉
再找到你自己写的配置文件加载
nginx -c /etc/nginx/nginx.conf #我一般用这个命令加载
nginx -s quit #处理完当前请求然后退出
nginx -s reload #重启
nginx -s reopen #重新打开日志文件
当然,使用不同方法安装的nginx形式不同,centos使用yum安装,ubuntu使用apt-get下载,但是都是修改nginx.conf文件
(二)nginx配置服务器静态资源路径
有时,我们的网站放到服务器上,如果是纯静态的,不需要大前端启动node服务的,不需要前端服务器,直接放到nginx的html目录下,配置都不用,在浏览器访问http://localhost就能访问,如果刷新和跳页有问题就是目录打包后相对位置不对。我们的网站一般都部署在80端口下,80端口在浏览器时默认不需要输端口号的,所以看到各大门户网站都是没有端口号的,都是部署在80端口下,使用一个公网ip地址解析域名,然后在服务器集群上做负载均衡,具体不了解。
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
这是nginx.conf默认的。server是主机设置(指定虚拟主机域名,ip,端口;location是url匹配特定位置后的设置。listen声明服务器监听的端口号;root是托管静态站点最关键的部分,一般托管存放html和css文件,root就是定义静态资源文件的存放路径。上面的配置文件说明,当在浏览器输入本机ip,会默认访问/usr/share/nginx/html下的html文件。那么怎么自己定义存放的文件呢?
server{
listen 80;
server_name localhost 域名;
# rewrite ^(/[0-9|a-z|A-Z]+/){1,}.jpg$
location /image/ {
root /;
rewrite ^/image/(.*)$ /disk1/PersonSearchPrj/data/$1 break;
}
location /file/ {
root /;
rewrite ^/file/(.*)$ /disk1/PersonSearchPrj/files/$1 break;
}
一般,我们的需求是,用一个变量来分类,比如/image说明是存放图片的目录,至于目录多深,是否多级是后面的是,可能/image/background存放背景图片/image/userShot存放用户头像等,在浏览器输入http://www.***/image/userShot/xiaoming.jpg能在浏览器访问到服务器更目录下/disk1/PersonSearchPrj/data//image/userShot/xiaoming.jpg这个图片文件。那么就要用到nginx的重定向。
格式为:
rewrite <regrex> <replacement> [flag]
:()标记要截取的内容
:通过$1来引用,$2表示前面中第二个()里的内容。
[flag]:有last(本条后继续往下匹配);break(本条后终止);redirect(临时重定向);permanent(永久重定向吗,返回301)
下面有必要讲一下正则表达式:
1.始终
字符串开始用^ 字符串结尾用$
2.重复次数
*:(0~无穷)<=> {0,}
+: (1~无穷)<=> {1,}
?: (0,1)<=> {0,1}
{}: 范围(比如:ab{3,5} <=> abbb~abbbbb
3.其他
|: 或(比如:(b|cd)ef <=> bef,cdef
.: 可代替任何字符 (比如:^.{3}$ 表示3个字符长度的任意字符串)
[]: 表示该范围的字符可以出现 (比如:^[a-zA-z] 表示一个以字母开头的字符串)
\: 转义符 在'^.$()|+?\'这些字符前加转义字符,[]中不需要加(\d <=>[0-9], \D <=>[^/d]非数字, \s <=>空白字符, \w <=>单词字符,任何数字字母和下划线
(): 表示一个分组
现在可以看懂正则匹配了,也能自己根据需求改写,还需要知道location的一些简单规则,下面直接粘贴别人的样例了
下面四种情况分别用http://192.168.1.4/proxy/test.html 进行访问。
第一种:
location /proxy/ {
proxy_pass http://127.0.0.1:81/;
}
结论:会被代理到http://127.0.0.1:81/test.html 这个url
第二种(相对于第一种,最后少一个 /)
location /proxy/ {
proxy_pass http://127.0.0.1:81;
}
结论:会被代理到http://127.0.0.1:81/proxy/test.html 这个url
第三种:
location /proxy/ {
proxy_pass http://127.0.0.1:81/ftlynx/;
}
结论:会被代理到http://127.0.0.1:81/ftlynx/test.html 这个url。
第四种(相对于第三种,最后少一个 / ):
location /proxy/ {
proxy_pass http://127.0.0.1:81/ftlynx;
}
结论:会被代理到http://127.0.0.1:81/ftlynxtest.html 这个url
我们自己写的路径/disk1/PersonSearchPrj/data/$1最后是没有/的,所有location的/image/**也会拼接到里面。
(三)怎么发布自己前后端分离的项目
这个难度就有点大了,首先得定义好自己的项目架构,需要几个项目,最后启几个服务。前端服务如果占用8080端口,后端java项目占用8081端口,或者后端多个项目,还占用8082。
前后端分离,意味着前端负责展示界面和用户交互,获得用户数据,就是入参,通过http请求与后端交互,后端就是个开发接口,负责各种复杂的数据处理及存储等任务的,一般遵循restful风格的开发规范。那么需要在开发模式中定义好http请求,比如http://ocalhost:8081/v1/backend1/user/getUser这个接口,表示版本1,第一个后端项目,然后全部映射到80端口,申请域名,解析到服务器公网IP
server {
listen 80 default_server;
server_name www.bornfly.cn 公网ip;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
location /backend1/ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8081;
}
location /backend2/ {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8082;
}
location /front/ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
}
评论暂时关闭