22
回答
红薯老大,给个nginx和Tomcat的配置撒
【腾讯云】校园拼团福利,1核2G服务器10元/月!>>>   

Apache+tomcat+ajp13(jk)用了好几年了,最近nginx频频在我眼皮下出现,起初不在意,总觉得肯定没apache好,但这几次运行了下感觉确实很快,所以想研究一下

我本机测试一直都是apache+php+svn+tomcat一起跑的,apache什么都管,遇到php把链接给php,遇到jsp把链接给tomcat,svn一般也不用,就是挂在那里。虽然没有cluster但是为了部署需要,在机器上也配置出来了session复制功能,这一跑就是100M没了。

看了oschina是基于nginx+tomcat的,所以想向您讨教engine x tomcat的配置,麻烦刚给大家说说吧。实在懒得看文档了。老大现身说法讲一讲让大家受教一下吧~~

把配置贴出来不会影响网站代码、潜在风险什么的泄露吧~~

举报
张林
发帖于8年前 22回/8K+阅
共有22个答案 最后回答: 7年前

Nginx.conf :

user  oschina;
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 {
    use epoll;
    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  off;
    access_log  logs/access.log;

    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;
 
    client_header_buffer_size    1k;
    large_client_header_buffers  4 4k;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;

    #keepalive_timeout  75 20;

    include    gzip.conf;
   
    server {
    listen 80;
    server_name .oschina.net;
    location / {
        rewrite (.*) http://www.oschina.net$1 permanent;
    }
    }

    server {
    listen 80;
    server_name www.oschina.net my.oschina.net m.oschina.net;

        log_format  oschina_log
        '$remote_addr - $remote_user [$time_local] $request '
        '"$status" $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"';
        access_log  logs/oschina.log;

    location ~ ^/(WEB-INF)/ {
            deny all;
        }

        location ~ \.(apk|torrent|htm|html|asp|php|gif|jpg|jpeg|png|bmp|ico|rar|css|js|zip|java|jar|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ {
            root /data/oschina/webapp;
        access_log off;
            expires 24h;
        }
       
    location ~ ^/uploads/ {
        access_log off;
            root /data/oschina/webapp;
        expires 24h;
        }

    location / {
        proxy_pass http://localhost:8080;
        include proxy.conf;
    }

    error_page 502 503 /502.html;
        error_page 404 /404.html;
    error_page 403 /403.html;
    }
}

gzip.conf:

gzip              on;
gzip_min_length      1000;
gzip_types         text/plain text/css application/x-javascript;

proxy.conf:

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   300;
proxy_send_timeout      300;
proxy_read_timeout      300;
proxy_buffer_size       4k;
proxy_buffers           4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

--- 共有 1 条评论 ---
james_yourewrite (.*) http://www.oschina.net$1 permanent; 这句的意思,是不是访问 http://localhost:8080/oschina 这样的后端 url ,会重定下到 http://localhost/oschina ? 4年前 回复

engine X与 Tomcat通讯是用8080端口进行 代理proxy是吗?

正则那里还没怎么看懂,看来还得看看engine x的资料补习补习

我也发扬一下风格,这里是我对apache和tomcat的配置:

httpd.conf

LoadModule actions_module modules/mod_actions.so

LoadModule alias_module modules/mod_alias.so

LoadModule asis_module modules/mod_asis.so

LoadModule auth_basic_module modules/mod_auth_basic.so

#LoadModule auth_digest_module modules/mod_auth_digest.so

#LoadModule authn_alias_module modules/mod_authn_alias.so

#LoadModule authn_anon_module modules/mod_authn_anon.so

#LoadModule authn_dbd_module modules/mod_authn_dbd.so

#LoadModule authn_dbm_module modules/mod_authn_dbm.so

LoadModule authn_default_module modules/mod_authn_default.so

LoadModule authn_file_module modules/mod_authn_file.so

#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so

#LoadModule authz_dbm_module modules/mod_authz_dbm.so

LoadModule authz_default_module modules/mod_authz_default.so

LoadModule authz_groupfile_module modules/mod_authz_groupfile.so

LoadModule authz_host_module modules/mod_authz_host.so

#LoadModule authz_owner_module modules/mod_authz_owner.so

LoadModule authz_user_module modules/mod_authz_user.so

LoadModule autoindex_module modules/mod_autoindex.so

#LoadModule cache_module modules/mod_cache.so

#LoadModule cern_meta_module modules/mod_cern_meta.so

LoadModule cgi_module modules/mod_cgi.so

#LoadModule charset_lite_module modules/mod_charset_lite.so

LoadModule dav_module modules/mod_dav.so

LoadModule dav_fs_module modules/mod_dav_fs.so

#LoadModule dav_lock_module modules/mod_dav_lock.so

#LoadModule dbd_module modules/mod_dbd.so

#LoadModule deflate_module modules/mod_deflate.so

LoadModule dir_module modules/mod_dir.so

#LoadModule disk_cache_module modules/mod_disk_cache.so

#LoadModule dumpio_module modules/mod_dumpio.so

LoadModule env_module modules/mod_env.so

#LoadModule expires_module modules/mod_expires.so

#LoadModule ext_filter_module modules/mod_ext_filter.so

#LoadModule file_cache_module modules/mod_file_cache.so

#LoadModule filter_module modules/mod_filter.so

#LoadModule headers_module modules/mod_headers.so

#LoadModule ident_module modules/mod_ident.so

#LoadModule imagemap_module modules/mod_imagemap.so

LoadModule include_module modules/mod_include.so

#LoadModule info_module modules/mod_info.so

LoadModule isapi_module modules/mod_isapi.so

#LoadModule ldap_module modules/mod_ldap.so

#LoadModule logio_module modules/mod_logio.so

LoadModule log_config_module modules/mod_log_config.so

#LoadModule log_forensic_module modules/mod_log_forensic.so

#LoadModule mem_cache_module modules/mod_mem_cache.so

LoadModule mime_module modules/mod_mime.so

#LoadModule mime_magic_module modules/mod_mime_magic.so

LoadModule negotiation_module modules/mod_negotiation.so

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule rewrite_module modules/mod_rewrite.so

LoadModule setenvif_module modules/mod_setenvif.so

#LoadModule speling_module modules/mod_speling.so

#LoadModule ssl_module modules/mod_ssl.so

#LoadModule status_module modules/mod_status.so

#LoadModule substitute_module modules/mod_substitute.so

#LoadModule unique_id_module modules/mod_unique_id.so   //mod_security 共同打开(下边配置中已经打开)

#LoadModule userdir_module modules/mod_userdir.so

#LoadModule usertrack_module modules/mod_usertrack.so

#LoadModule version_module modules/mod_version.so

#LoadModule vhost_alias_module modules/mod_vhost_alias.so

#SVN Module conf

LoadModule dav_svn_module "D:/Serv/Subversion/bin/mod_dav_svn.so"

LoadModule authz_svn_module "D:/Serv/Subversion/bin/mod_authz_svn.so"

#PHP Module conf

LoadModule php5_module "D:/Serv/Apache/PHP/php5apache2_2.dll"

PHPIniDir "D:/Serv/Apache/PHP/"

#mod_security conf 2.5.12

LoadModule security2_module modules/mod_security2/mod_security2.so

LoadModule unique_id_module modules/mod_unique_id.so

SecRuleEngine On

SecDefaultAction log,auditlog,deny,status:403,phase:2,t:lowercase,t:replaceNulls,t:compressWhitespace

SecAuditEngine RelevantOnly

SecAuditLogType Serial

SecAuditLog logs/mod_security2.log

#jk Module conf

LoadModule jk_module modules/mod_jk.so

# Where to find workers.properties

JkWorkersFile conf/worker.properties

JkMountFile conf/uriworkermap.properties

# Where to put jk logs

JkLogFile logs/mod_jk.log

# Set the jk log level [debug/error/info]

JkLogLevel info

# Select the log format

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

# JkOptions indicate to send SSL KEY SIZE,

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format

JkRequestLogFormat "%w %V %T"

<IfModule !mpm_netware_module>

<IfModule !mpm_winnt_module>

ServerName localhost

DocumentRoot "D:/Serv/wwwroot/"

<Directory "D:/Serv/wwwroot/cache/status">

    Order allow,deny

    Deny from all

    #allow from 127.0.0.1

</Directory>

<Location /svn>

        DAV svn

        SVNPath "D:/Serv/svnroot/"

</Location>

后面部分无关紧要的就不贴了。

worker.properties的配置

#--- see following for detail   

# "http://tomcat.apache.org/connectors-doc/"  

# "http://tomcat.apache.org/connectors-doc/reference/workers.html"  

#========server列表========

worker.list=controller,status

#========controller,负载均衡控制器========  

# load-balance worker, can be "lb, status"

worker.controller.type=lb

worker.controller.balance_workers=tomcat1,tomcat2

# 如何选择最优的worker, B[usyness]: 选最不忙的, R[equest]: 缺省

worker.controller.method=B

#ticky_session   sticky_session_force             含义

#     true             false            SESSION会复制,有粘性

#     true             true             SESSION不复制,有粘性

#     false            false            SESSION会复制,无粘性

#     false            true             SESSION会复制,无粘性

# *注意* worker.controller.sticky_session=1,等同于worker.controller.sticky_session=true.此处指定集群是否需要会话复制,

#如果设为true,则表明为会话粘性,不进行会话复制,当某用户的请求第一次分发到哪台Tomcat后,后继的请求会一直分发到此

#Tomcat服务器上处理;如果设为false,则表明需求会话复制。这就是说,如果你要想进行均衡负载,并在192.168.1.5和192.168.1.3

#两台机器的Tomcat实例上实现集群全局session复制,此处值要设置成false。

#sticky_session 1: True, otherwise False, 相同session id一直访问同一服务器   

#sticky_session_force session id出错状态不返回500(Server Error), 由另一worker接手   

worker.controller.sticky_session=0

worker.controller.sticky_session_force=0

#worker.status.type=status

#========tomcat1========   

worker.tomcat1.port=8009

worker.tomcat1.host=localhost

worker.tomcat1.type=ajp13

worker.tomcat1.lbfactor=1

worker.tomcat1.socket_connect_timeout=3000

#========tomcat2========

#worker.tomcat2.port=8009

#worker.tomcat2.host=localhost

#worker.tomcat2.type=ajp13

#worker.tomcat2.lbfactor=1

#worker.tomcat2.socket_connect_timeout=3000

worker.connection_pool_size=10

#默认值(connection_pool_size +1)/ 2

worker.connection_pool_minsize=5

worker.socket_timeout=1

worker.socket_connect_timeout=3000

uriworkermap.properties配置,设置转发规则

/*.jsp=controller

/*.do=controller

/blog/*=controller

/bbs/*=controller

/site/*=controller 

!/*.html=controller 

!/*.gif=controller 

!/*.jpg=controller 

!/*.png=controller 

extra/httpd-mpm.conf 模块  

上边一样的就不贴了,主要是下边的配置,因为我用了mod_security模块,所以要做一些配置,这里不做解释了,写的很详细,我比较喜欢在配置文件里把容易忘记的地方写上文档。毕竟这东西配完了就不再动了,很容易忘记

# WinNT MPM

# ThreadsPerChild: constant number of worker threads in the server process

# MaxRequestsPerChild: maximum  number of requests a server process serves

#注意:ThreadLimit指令应当放在ThreadsPerChild之前,否则ThreadsPerChild指令生效后ThreadLimit会失效,而导致不必要的错误 ThreadLimit必须大于等于ThreadsPerChild

#对于mpm_winnt,ThreadLimit的默认值是1920;对于其他MPM这个值是64

#ThreadLimit 这个指令设置了每个子进程可配置的线程数ThreadsPerChild上限。任何在重启期间对这个指令的改变都将被忽略,但对ThreadsPerChild的修改却会生效。

#ThreadLimit 使用这个指令时要特别当心。如果将ThreadLimit设置成一个高出ThreadsPerChild实际需要很多的值,将会有过多的共享内存被分配。

#如果将ThreadLimit和ThreadsPerChild设置成超过系统的处理能力,Apache可能无法启动,或者系统将变得不稳定。该指令的值应当和ThreadsPerChild大致保持一致

#ThreadsPerChild 每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。

<IfModule mpm_winnt_module>

    ThreadLimit            2000

    ThreadsPerChild        2000

    MaxRequestsPerChild    2000

</IfModule>

当然由于日常使用windows的原因,因此apache的配置并不一定适合linux 这里是NT架构使用了线程,而linux一般都是使用进程。

以前研究过apache的文档,但老是看过以后就忘记了,用的时候还得继续看,比较恶心。

嘿, 因为 Nginx 就是 http 协议的反向代理, 所以不需要像 apache 那样还得来个 JK

如果是我那,就直接在 Nginx 上分辨, 是 PHP 就给 Apache, 是 jsp 就直接 tomcat 连 apache 的 JK 都省了。

但Session 粘贴问题的话,Nginx 的 第三方 session 功能好像暂时还是在测试阶段...除非只用 cookies

所以应用还得斟酌了.

顶部