最近由于公司的需要,研究了nginx的配置。初步了解了nginx的原理。首先先了解两个概念,正向代理和反向代理。假设A是消费者,B是海外代购人,C是美国苹果公司。你想要买一部iPhone9手机,正向代理是,你先去通知B说要买一部iPhone9,然后B去苹果公司拿货,拿到在发货给你;反向代理是,B那里已经有很多iPhone9,你只要付钱买,他就给你发货,但是你不晓得这些iPhone9是不是B去苹果公司拿的。
如果我们不用nginx时,假设要访问一个工程,工程名是test,对应的域名是http://www.xxxx.com,这样他就会去找域名指向的IP,也就是解析地址。找到后ip指向的服务器后,他就去80端口的tomcat里面看看有没有该工程,其它端口他不去看,tomcat里面的host name配置为该域名,这样就可以正确访问。如果我们用nginx时,输入域名,他会找到nginx的服务器位置,nginx可以将test工程配置多个tomcat,指向多个端口,对于用户来说,完全不晓得他从哪里获取的内容发给你。
下面是部署成功的nginx的配置:nginx.conf
#使用的用户组
#user nobody;
#指定工作衍生进程数(一般等于CPU的总核数或总核数的两倍)
worker_processes 1;
#指定错误日志存放的路径,错误日志记录级别可选项为[debug|info|notice|warn|error|crit]
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#指定pic存放的路径
pid logs/nginx.pid;
#指定文件描述符数量
worker_rlimit_nofile 65535;
events {
#使用的网络I/O模型,Linux系统推荐采用epoll模型,FreeBSD系统推荐采用kqueue模型
#use epoll;
#允许的链接数
worker_connections 65535;
}
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;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32K;
#设置客户端能够上传的文件大小
client_max_body_size 10000m;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay on;
server_tokens off;
client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 2 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #获取真实IP
#gzip on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/x-component;
gzip_vary on;
upstream portals_tomcat{
server localhost:910;
}
server {
listen 80;
server_name uuzj.xh-expo.com;
server_name_in_redirect off;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://localhost:910;
}
}
}
tomcat用的是7.0的,server.xml配置如下
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="D:\tomcat\uuzj\webapps\groupshopping" debug="0" reloadable="true" crossContext="true"></Context>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
这样成功,很多人以为这样配置下就可以了,不要忘记去域名商那边,把解析地址指向nginx服务器的位置。ping一下看看通不通