java 怎么向nginx web服务器传输文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 怎么向nginx web服务器传输文件相关的知识,希望对你有一定的参考价值。

搭建项目部署的环境
购买服务器
首先需要去阿里云购买服务器。本人购买的是Windows Server 2008,刚开始购买了基于Linux的各种系统(Ubuntu、CentOS、AliyunLinx、Debian),由于没有Linux操作基础,最后都没有鼓捣成功,还是先用Windows Server练练手,等了解了大体流程之后在迁移到Linux上。这是我购买的阿里云ECS实例

2
之后使用Windows操作系统自带的“远程桌面连接”工具直接连接到远程服务器:
连接成功之后就会进入到熟悉的Windows操作系统的桌面了,之后就可以安装各种部署的软件,如JDK、mysql Database、Tomcat等常用的工具,和在本机上操作并无不同。

3
购买域名
服务器可以正常访问了,那么接下来就需要购置一个域名,通过域名即可跳转到相应的服务器IP,进而让所有的人都可以访问。
由于我的服务器是在阿里云购买的,阿里云和万网合并了,那么直接在阿里云中就可以一站式搞定。

4
stevejrong.top即我购买的域名。
选择一个域名后,点击“解析”以将域名映射到刚才开通的服务器上:
这里万网做了详细的介绍,在此就不多讲如何映射了。

5
域名备案
要想真正让所有人都能访问网站,那么就需要备案。由于服务器是在阿里云购置的,而阿里云和万网的服务现在已经合并,所以可以轻松申请备案。
部署项目
域名和服务器都准备好了,那么现在可以发布项目了。
这里我采用了nginx反向代理服务器和Tomcat容器组合共同来支撑整个网站的运行。Nginx负责拦截并转发客户端发来的请求,它并不做页面的解析等工作,这些工作都交给Tomcat去处理,因为Nginx擅长处理请求,是一个高性能的反向代理服务器,它几乎没有处理Servlet请求的能力,所以要配合一个能够处理Servlet的容器共同协作,当然,Servlet容器有很多,如Resin、JBoss、Tomcat、GlassFish等等,选择Servlet容器就因人而异了,看自己喜欢用什么,还有一些适应的场景和环境。没有最好的,只有最适合的。Tomcat也未必最垃圾,只是看操作者的水平,能否合理优化是一个难题

安装和配置Nginx

解压后得到如下几个文件和文件夹:

打开conf目录下的nginx.conf文件,这个文件是Nginx服务器的配置文件:

配置代码和解释如下:
#user nobody;

#工作进程数
worker_processes 2;

#错误日志
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#进程保存文件
#pid logs/nginx.pid;

#等待事件
events

#每个进程的最大连接数(最大连接数=连接数 * 进程数)
worker_connections 2048;


http

#文件扩展名和文件类型映射
include mime.types;

#默认文件类型
default_type application/octet-stream;

#日志的输出格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#请求日志的保存位置
#access_log logs/access.log main;

#是否开启发送文件支持
sendfile on;
#tcp_nopush on;

#活动连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;

#是否开启gzip压缩支持
#gzip on;

#第一个虚拟主机
server

#监听到的端口
listen 80;

#主机名称
server_name www.stevejrong.top;

#设置字符编码格式
#charset koi8-r;

#本地虚拟主机的访问日志
#access_log logs/host.access.log main;
参考技术A 由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。
在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。
如果hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。本回答被提问者采纳

Linux下JAVA WEB服务器的搭建三(NGINX)

目录

1、nginx介绍

2、nginx的下载

3、nginx的安装

3.0 nginx的卸载

3.1 基于APT源安装

3.2 编译源码安装

3.2.1 安装依赖包

3.2.2 解压nginx tar包

3.2.3 nginx文件夹改名并进入到该目录

3.2.4 configure脚本自动生成Makefile脚本

3.2.5 编译nginx

3.2.6 安装nginx

3.3 ubuntu 防火墙开启80端口

3.4 启动并访问nginx

3.5 配置软链接任意路径启动nginx

3.6 停止nginx服务4种方法

3.7 nginx其他命令

4、使用systemctl控制Nginx开机自启动

4.1 创建nginx.service

4.2 编辑nginx.service服务启动文件

4.3 使服务启动文件生效

4.4 启动nginx

4.5 关闭nginx

4.6 重启nginx

4.7 开机启动

4.8 测试

5、nginx的配置

5.1 nginx文件结构

5.2 基础配置文件

5.3 配置文件详解

5.4 配置文件实例

6、nginx安装常见问题


要部署普通的java web项目,需要在linux上搭建好web服务器运行环境,包括JDK、tomcat、mysql、redis、nginx等,本文主要介绍nginx的下载安装配置,linux系统采用的是ubuntu。nginx官网地址:http://nginx.org/ 。nginx官方文档:nginx documentation

1、nginx介绍

Nginx (engine x) 是一个是一款轻量级、高性能的WEB和反向代理服务器,同时也提供了IMAP/POP3/SMTP代理服务,在BSD-like 协议下发行。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。2021年5月25日发布的最新稳定版本为1.20.1。

Nginx 可以在大多数 Unix Linux OS 上编译运行,并有 Windows 移植版。 特点是占有内存少,并发能力强,在连接高并发的情况下,Nginx是Apache服务不错的替代品。一般情况下,对于新建站点,建议使用最新稳定版作为生产版本。

nginx优点:

  • 1、轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源。
  • 2、抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。
  • 3、nginx 处理静态文件好,静态处理性能比 apache 高三倍以上。
  • 4、nginx 的设计高度模块化,编写模块相对简单。
  • 5、nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃。
  • 6、nginx 作为负载均衡服务器,支持 7 层负载均衡。
  • 7、nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器。
  • 8、启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级
  • 9、社区活跃,各种高性能模块出品迅速

Apache优点:

  • 1、apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache
  • 2、apache 发展到现在,模块超多,基本想到的都可以找到
  • 3、apache 更为成熟,少 bug ,nginx 的 bug 相对较多
  • 4、apache 超稳定
  • 5、apache 对 PHP 支持比较简单,nginx 需要配合其他后端用
  • 6、apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。

apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区。两者最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个连接(万级别)可以对应一个进程。一般来说,需要性能的 web 服务,用 nginx 。如果不需要性能只求稳定,更考虑 apache 。更为通用的方案是,前端 nginx 抗并发,后端 apache 集群,配合起来会更好。

nginx应用场合:

  • 静态服务器(图片,视频服务),另个lighttpd。并发几万,html,js,css,flv,jpg,gif等。
  • 动态服务,nginx—fastcgi 方式运行PHP,jsp。(PHP并发约500-1500,MySQL 并发约300-1500)。
  • 反向代理,负载均衡。日pv2000W以下,都可直接用nginx做代理。
  • 缓存服务。类似 SQUID,VARNISH。

2、nginx的下载

进入ningx官网下载地址:http://nginx.org/en/download.html,下载最新稳定版本(stable)或者复制下载链接后直接下载到服务器上。

wget http://nginx.org/download/nginx-1.20.1.tar.gz

3、nginx的安装

linux的Ubuntu和Center os系统安装方式是不一样的。可以通过 cat /proc/version 命令查看linux系统。在Ubuntu下安装Nginx有2种方法,基于APT源安装和编译源码安装,如果想要安装最新版本的就必须下载源码包编译安装。

连接服务器后,获取root权限,执行sudo apt update(如果已经是root权限可以去掉sudo),检查可更新的软件包汇总情况,如果有需要更新的软件包,可以使用以下命令更新:sudo apt upgrade 软件包名

3.0 nginx的卸载

使用命令 nginx -v 查看nginx的版本号,若已安装了nginx但版本不符合要求,可以通过以下命令卸载。有输入提示时,输入Y即可。

# 彻底卸载nginx
apt-get --purge autoremove nginx

3.1 基于APT源安装

sudo apt-get install nginx

安装过程会让选一个Y同意占用内存。

安装好的文件位置:

  • /usr/sbin/nginx:主程序
  • /etc/nginx:存放配置文件
  • /usr/share/nginx:存放静态文件
  • /var/log/nginx:存放日志
  • /etc/init.d/:创建了启动脚本nginx
  • 默认的虚拟主机的目录设置在了/var/www/nginx-default (有的版本默认的虚拟主机的目录设置在了/var/www, 请参考/etc/nginx/sites-available里的配置)

通过这种方式安装的,会自动创建服务,会自动在/etc/init.d/nginx新建服务脚本,然后就可以使用sudo service nginx {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}的命令启动。创建好的文件由于放在/usr/sbin目录下,所以能直接在终端中使用nginx命令而无需指定路径。

通过nginx -v 命令查看nginx是否安装成功,service nginx start 启动nginx。

3.2 编译源码安装

编译源码安装这种方式可以自定安装指定的模块以及最新的版本。方式更灵活。

3.2.1 安装依赖包

apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev
# Ubuntu20.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
#apt-get install openssl openssl-dev
sudo apt-get install openssl 
sudo apt-get install libssl-dev

3.2.2 解压nginx tar包

在Ubuntu服务器的/opt目录下新建nginx目录,将下载的nginx-1.20.1.tar.gz安装包复制到该目录下解压。解压命令:tar -zxvf nginx-1.20.1.tar.gz 。

  • 也可以将nginx安装到/usr/local目录下,即 /usr/local/nginx 目录。
cd /opt
mkdir nginx
cd nginx
wget wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar -zxvf nginx-1.20.1.tar.gz

3.2.3 nginx文件夹改名并进入到该目录

如果使用的是没有权限的非root账户,则在命令的前面加上 sudo。

3.2.4 configure脚本自动生成Makefile脚本

nginx源码的编译需要使用configure脚本自动生成Makefile脚本,configure脚本支持许多选项,来控制安装的各种属性。

进入到nginx解压后的目录中,执行命令:./configure --prefix=/nginx   (--prefix=/nginx指明软件安装的路径,/nginx是为安装nginx新建的目录,可以不指定)。

  • 使用./configure --help查看各模块使用情况,用 --without-http_ssi_module 方式关闭不需的模块。可用 --with-http_perl_modules 方式安装需要的模块(如:./configure --prefix=/data/nginx-1.10.1 --user=nginx --group=nginx  --with-http_ssl_module  --with-http_stub_status_module)。
  • 注意:nginx的一些模块需要依赖其他第三方的库,通常有pcre库(支持rewrite模块)、zlib库(支持gzip模块)和openssl库(支持ssl模块)等。
# 进入nginx目录
/opt/nginx/nginx-1.20.1-server1
# 执行命令
./configure

3.2.5 编译nginx

执行make命令编译,可以看到屏幕上nginx源代码编译的过程。

3.2.6 安装nginx

使用 make install 命令完成安装后,将当前目录定位到 /usr/local/nginx 下,就可以查看nginx的全部资源了,主要有4个文件夹组成:conf、html、logs、sbin。

  • conf目录中存放nginx的所有配置文件
  • html目录中存放了nginx服务器在运行过程中调用的一些html网页文件
  • logs用来存放nginx服务器日志的
  • sbin目录存放的是nginx的主程序

3.3 ubuntu 防火墙开启80端口

如果nginx的80端口不在防火墙启用规则中,需添加进去,sudo ufw allow 80,然后通过sudo ufo status 可以查看到80 端口已开放。

  • 防火墙禁用端口命令:ufw deny端口
  • 关闭防火墙命令:ufw disable

3.4 启动并访问nginx

进入nginx启动目录/usr/local/nginx/sbin,通过 ./nginx 命令启动nginx。可以通过-c 指定配置文件的路径,不加的话,nginx会自动加载默认路径的配置文件,默认配置文件地址为: /usr/local/nginx/conf/nginx.conf。可通过nginx -t 查看配置文件的信息。

cd /usr/local/nginx/sbin

# 无参数启动nginx,nginx会自动加载默认路径的配置文件
./nginx

# 有参数启动nginx - 指定配置文件
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
注意:-c 指定配置文件的路径,不加的话,nginx会自动加载默认路径的配置文件,可以通过-h查看帮助命令。

#查看进程:
ps -ef | grep nginx
#查看进程:
ps aux | grep nginx

#systemctl命令启动
systemctl start nginx

# 重启Nginx服务
systemctl restart nginx

# 查看端口号
netstat -tlnp

访问nginx

网页输入ip地址,访问成功,到此,nginx安装完毕。

3.5 配置软链接任意路径启动nginx

配置软链接在usr/bin/nginx(该路径在系统PATH下),可以在任意路径下直接输入nginx启动(不需要指定执行路径)。

sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

3.6 停止nginx服务4种方法

1)从容停止服务

命令:nginx -s quit ,这种方法较stop相比就比较温和一些了,需要进程完成当前工作后再停止。

2)立即停止服务

命令:nginx -s stop,这种方法比较强硬,无论进程是否在工作,都直接停止进程。

3)systemctl 停止

命令:systemctl stop nginx.service,systemctl属于Linux命令。

4)killall 方法杀死进程

命令:killall nginx,直接杀死进程,在上面无效的情况下使用,态度强硬,简单粗暴!

3.7 nginx其他命令

1)重新载入配置文件

当有系统配置文件有修改,使用命令nginx -s reload重新载入配置文件,建议不要停止再重启,以防报错!

2)测试nginx配置文件是否正常命令 nginx -t 

root@xnzysq20210118001:/usr/local# nginx -t 
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
root@xnzysq20210118001:/usr/local# 

3)检查进程是否正常

通过命令 netstat -lntup |grep nginx  或 ps -ef | grep nginx 检查进程是否正常。

4)查看html是否正常

通过http命令行工具curl访问http://localhost是否正常。curl -I http://localhost  或 curl http://localhost

5)nginx -V 查看已经编译的参数,nginx -v 查看版本

6)使用kill命令操作nginx。格式:kill -信号 PID

信号名称:

  • TERM,INT 快速关闭
  • QUIT 优雅的关闭,保持吸纳有的客户端连接
  • HUP 重启应用新的配置文件
  • USR1 重新打开日志文件
  • USR2 升级程序
  • WINCH 优雅的关闭工作进程

例子:

  • kill -QUIT  `cat /data/nginx/nginx.pid`
  • kill -HUP `cat /data/nginx/nginx.pid`

7)nginx其他命令

nginx -s signal

signal:

  • stop — fast shutdown
  • quit — graceful shutdown
  • reload — reloading the configuration file
  • reopen — reopening the log files
  • 用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中

nginx -h 或 nginx -? 显示帮助信息

4、使用systemctl控制Nginx开机自启动

Systemctl是一个系统管理守护进程、工具和库的集合,用于取代System V、service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器。

通过Systemctl –help可以看到该命令主要分为:查询或发送控制命令给systemd服务,管理单元服务的命令,服务文件的相关命令,任务、环境、快照相关命令,systemd服务的配置重载,系统开机关机相关的命令。 

4.1 创建nginx.service

cd到 /usr/lib/systemd/system目录下,创建nginx服务启动文件,vim nginx.service(或用绝对路径创建vim /usr/lib/systemd/system/nginx.service),vim表示编辑一个文件,若文件不存在则创建。

4.2 编辑nginx.service服务启动文件

[Unit]

Description=nginx -high performance web server

After=network.target remote-fs.target nss-lookup.target

[Service]

Type=forking

WorkingDirectory=/usr/local/nginx

ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

ExecReload=/usr/local/nginx/sbin/nginx -s reload

ExecStop=/usr/local/nginx/sbin/nginx -s stop

PrivateTmp=true

[Install]

WantedBy=multi-user.target

4.3 使服务启动文件生效

systemctl daemon-reload

4.4 启动nginx

systemctl start nginx

4.5 关闭nginx

systemctl stop nginx

4.6 重启nginx

systemctl restart nginx

4.7 开机启动

systemctl enable nginx

4.8 测试

通过http命令行工具curl访问http://localhost是否正常。使用 ps aux|grep nginx 命令查看进程。使用 netstat -ntlp 命令查看网络端口情况。

5、nginx的配置

5.1 nginx文件结构

  • 1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
  • 2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  • 3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  • 4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  • 5、location块:配置请求的路由,以及各种页面的处理情况。
...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

5.2 基础配置文件

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

5.3 配置文件详解

#nginx进程,一般设置为和cpu核数一样
worker_processes 4;                        
#错误日志存放目录 
error_log  /data1/logs/error.log  crit;  
#运行用户,默认即是nginx,可不设置
user nginx       
#进程pid存放位置
pid        /application/nginx/nginx.pid;        

#Specifies the value for maximum file descriptors that can be opened by this process. 
#最大文件打开数(连接),可设置为系统优化后的ulimit -HSn的结果
worker_rlimit_nofile 51200;

cpu亲和力配置,让不同的进程使用不同的cpu

worker_cpu_affinity 0001 0010 0100 1000 0001 00100100 1000;

#工作模式及连接数上限
events 
{
  use epoll;       #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
  worker_connections 1024;  #;单个后台worker process进程的最大并发链接数
}
###################################################
http 
{

include mime.types; #文件扩展名与类型映射表
default_type application/octet-stream; #默认文件类型

  #隐藏响应header和错误通知中的版本号
  server_tokens off;
  #开启高效传输模式   
  sendfile on;

-------------------------------------------------------------------------------------------------
  #激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布,
  积极的作用是减少网络报文段的数量
  tcp_nopush     on;
  #激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能
  tcp_nodelay on;
#连接超时时间,单位是秒
  keepalive_timeout 60;

  #开启gzip压缩功能
    gzip on;
 #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩。建议设置成大于1K。如果小于1K可能会越压越大。
  gzip_min_length  1k;

#压缩缓冲区大小。表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
  gzip_buffers     4 16k;

#压缩版本(默认1.1,前端为squid2.5时使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
  gzip_http_version 1.0;

#压缩比率。用来指定GZIP压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源。
  gzip_comp_level 9;

#用来指定压缩的类型,“text/html”类型总是会被压缩
  gzip_types       text/plain application/x-javascript text/css application/xml;
  #vary header支持。该选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用

Squid缓存经过Nginx压缩的数据。

gzip_vary off;
#开启ssi支持,默认是off
  ssi on;
  ssi_silent_errors on;
#设置日志模式
    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" $http_x_forwarded_for';

#反向代理负载均衡设定部分

#upstream表示负载服务器池,定义名字为backend_server的服务器池
upstream backend_server {
    server   10.254.244.20:81 weight=1 max_fails=2 fail_timeout=30s;
    server   10.254.242.40:81 weight=1 max_fails=2 fail_timeout=30s;
    server   10.254.245.19:81 weight=1 max_fails=2 fail_timeout=30s;
    server   10.254.243.39:81 weight=1 max_fails=2 fail_timeout=30s;
  #设置由 fail_timeout 定义的时间段内连接该主机的失败次数,以此来断定 fail_timeout 定义的时间段内该主机是否可用。默认情况下这个数值设置为 1。零值的话禁用这个数量的尝试。

设置在指定时间内连接到主机的失败次数,超过该次数该主机被认为不可用。

#这里是在30s内尝试2次失败即认为主机不可用!
  }
###################

#基于域名的虚拟主机
  server
  {

#监听端口
    listen       80;
    server_name  www.abc.com abc.com;    
    index index.html index.htm index.php;    #首页排序
    root  /data0/abc;                            #站点根目录,即网站程序存放目录 
    error_page 500 502 404 /templates/kumi/phpcms/404.html;   #错误页面
#伪静态   将www.abc.com/list....html的文件转发到index.php。。。
#rewrite ^/list-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\\.html$ /index.php?m=content&c=index&a=lists&catid=$1&types=$2&country=$3&language=$4&age=$5&startDate=$6&typeLetter=$7&type=$8&page=$9 last;
#location 标签,根目录下的.svn目录禁止访问
    location ~ /.svn/ {
     deny all;
    }
            location ~ \\.php$   
             {  #符合php扩展名的请求调度到fcgi server  
              fastcgi_pass  127.0.0.1:9000;  #抛给本机的9000端口
              fastcgi_index index.php;    #设定动态首页
              include fastcgi.conf;
             }

5.4 配置文件实例

########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1,一般设置为和cpu核数一样
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}

需要注意的有以下几点:

  • 1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
  • 2.$remote_user :用来记录客户端用户名称;
  • 3.$time_local : 用来记录访问时间与时区;
  • 4.$request : 用来记录请求的url与http协议;
  • 5.$status : 用来记录请求状态;成功是200;
  • 6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
  • 7.$http_referer :用来记录从那个页面链接访问过来的;
  • 8.$http_user_agent :记录客户端浏览器的相关信息;
  • 9.惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能;
  • 10.每个指令必须有分号结束;

6、nginx安装常见问题

1)nginx 安装报错:make: *** No rule to make target `build', needed by `default'. Stop.

出现此种情况,是linux系统没有安装先决条件

1、GCC——GNU编译器集合(GCC可以使用默认包管理器的仓库(repositories)来安装,包管理器的选择依赖于你使用的Linux发布版本,包管理器有不同的实现:yum是基于Red Hat的发布版本;apt用于Debian和Ubuntu;yast用于SuSE Linux等等。)

RedHat中安装GCC:yum install gcc

Ubuntu中安装GCC:apt-get install gcc

2、PCRE库(Nginx编译需要PCRE(Perl Compatible Regular Expression),因为Nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法。这里需要安装两个安装包pcre和pcre-devel。第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码,这正是我们需要的理由。)

RedHat中安装PCRE:yum install pcre pcre-devel

Ubuntu中安装PCRE:apt-get install libpcre3 libpcre3-dev

3、zlib库(zlib库提供了开发人员的压缩算法,在Nginx的各种模块中需要使用gzip压缩。如同安装PCRE一样,同样需要安装库和它的源代码:zlib和zlib-devel。)

RedHat中安装zlib:yum install zlib zlib-devel

Ubuntu中安装zlib:apt-get install zlib1g zlib1g-dev

4、OpenSSL库(在Nginx中,如果服务器提供安全网页时则会用到OpenSSL库,我们需要安装库文件和它的开发安装包(openssl和openssl-devel)。)

RedHat中安装OpenSSL:yum install openssl openssl-devel

Ubuntu中安装OpenSSL:apt-get install openssl openssl-dev

# Ubuntu20.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
#apt-get install openssl openssl-dev
sudo apt-get install openssl 
sudo apt-get install libssl-dev

以上是关于java 怎么向nginx web服务器传输文件的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud怎么实现web端上传超大文件

SpringCloud怎么实现web端上传超大文件

怎么用xshell5 向linux系统传输文件

Nginx Web 服务

java怎样获取硬件设备传输过来的数据

nVisual部署之nginx配置说明