20190624更新
html里面的引用不要使用绝对引用 不然使用二级域名会出错
例如网站根目录在/var/www/html/
项目在/var/www/html/demo里面
index.html引用/menu.html
nginx配置的二级域名/demoTest
menu.html正确的url因该是 http://localhost/demoTest/menu.html
如果是绝对引用就变成了 http://localhost/menu.html
这样当然找不到文件啦
如果不是二级域名则可以忽略该问题
也就是说新建了一个nginx站点,指定了另一个域名,例如demoTest
然后把根目录指定为/var/www/html/demo
这样访问的话就是 http://demoTest
显然这样做需要在hosts里面添加记录
127.0.0.1 demoTest
上个星期部署项目的时候发现公司用的nginx代理的tomcat,之前我就认识apache和tomcat这俩,于是从头学了
下载地址 http://nginx.org/en/download.html
我用的linux,debian系列,kali2017,更新到现在应该叫2018了,于是用的包安装
具体介绍在里面,我英语渣,勉强能看懂 http://nginx.org/en/linux_packages.html#stable
先下载apt-key,大概是类似证书一类的东西,然后导入
apt-key add 下载的key文件
之后在更新源里添加
deb http://nginx.org/packages/debian/ codename nginx deb-src http://nginx.org/packages/debian/ codename nginx
然后就是更新 apt-get update, 安装 apt-get install nginx
然后我发现我的linux自带了nginx,果然装个kali真省事,好多软件都有了,不用自己去找源
版本信息 nginx -v, 我的是1.13.10
kali下nginx的配置文件在 /etc/nginx下,看了目录结构后发现这和apache结构一样啊,看了配置文件之后,这俩用起来简直一样啊
之前想看weblogic的配置,看了安装后我就放弃了,之前装oracle数据库有心里阴影了
nginx的主要配置文件是位于主目录的nginx.conf
最好不要把所有配置信息都扔里面,我就扔了
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
这些,当然,原来的我也没删,对了,不建议用tab键代替缩进,四个空格虽然麻烦些,但至少所有的文本编辑器都能解析成一个显示效果
具体服务的配置文件放在主目录下的conf.d里面,比较好管理
我的一个配置文件 tomcat-server.conf
server {
listen 80;
server_name www.library.dev.co;
# 这个是我的作业,域名是假的,所以随意了,
# 假域名在/etc/hosts下配置 只要ip写成127.0.0.1 后面写啥都可以
# 不过顾名思义,假域名就是只有你能访问的域名,别人可访问不了,一般用于测试自己的程序
# 虽然127也能用,不过想让多个应用都跑80端口的话,不用反向代理我也不知道咋弄了
# 还有种情况就是DNS劫持,不过这种DNS劫持就是修改本地的HOSTS文件,把一些网址改成他们想让你去的主机的IP地址
# 比如说钓鱼网站啊这些东西,貌似现在很少能见到了,零几年那会这玩意很常见的,毕竟杀软少,防范意识差
location / { # 注意 反斜杠和花括号之间有空格 不要忘了 另外分号也别忘了,作为java程序员,基本不会忘记,导致写文档写完一行都习惯打个分号
proxy_pass http://localhost:8081; #来自jsp请求交给tomcat处理
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 6 32k; #proxy_buffers缓冲区,网页平均在32k以下的话>,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
}
server {
listen 80;
server_name 域名不给看;
location / {
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 6 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location /demo2 {
rewrite /demo2/(.*) /$1 break; # 这是我测试一下二级域名怎么玩
# 需求是两个应用,其中后者是前者的一部分,现在要将后者分离出来作为单独的服务存在,因为一个服务太大了不好管理升级,发布一次都要五六分钟(那些不是我写的,代码太乱了,看都不想看)
# 说白了就是懒
# 这样弄了之后,主服务通过一级域名访问,这个服务通过一级域名加二级域名访问,如果两个服务名字有冲突的话会发生什么我也没试过,不过一般不会吧,都作为单独的服务拉出来了不能在整个一样名字的服务吧
proxy_pass http://localhost:8082;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 6 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
对了,这是三个tomcat服务器挂在了nginx上,如果三个tomcat要一起跑,肯定要改配置文件,端口号不能重复
具体如何配置看别人写的博客吧,毕竟未经允许不能转载,所以就放个链接
https://blog.csdn.net/T_ZZZ/article/details/76906599
大致上就是要改三个端口,shutdown,http,ajp这仨,我是三个服务,所以要保证九个端口不被占用,于是我就用连着的8080,8081,8082......其他的也是(突然发现我好懒)
第一次没改shutdown,于是发现关了一个服务,其他俩也关掉了......
xml配置文件的块注释是<!-- Write here something -->
conf的配置文件的单行注释是#开头的
如果有配置用不到就注释掉比较好,删掉的话下次用的时候可能就忘记是啥了
nginx有个好东西,检测配置文件是否正确,nginx -t,重新加载配置文件是nginx -s reload
windows下启动nginx直接打开nginx.exe就行了,停止是nginx -s quit或者nginx -s stop
linux下启动服务 service nginx start, 停止就是service nginx startstop,当然也可以用nginx的那些命令,也就是windows的那些
不过不知道为啥,我只能用service命令启动
主服务: 域名/user/xxxxx
独立的那个服务: 域名/demo1/user/xxxxx