#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
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;
#允许使用含下划线的header
underscores_in_headers on;
#gzip on;
upstream domain_com { #服务器集群名字
#ip_hash;
#8881是我tomcat的http访问地址
server 127.0.0.1:8881 ;#服务器配置 weight是权重的意思,权重越大,分配的概率越大。
#server 127.0.0.1:9092 weight=1;
}
server {
listen 8880;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 8888 ssl;
server_name 域名;
#以下这些都是 ssl相关配置(这个证书.crt指的是不含bundle(CA证书)名称的证书直接使用另一个证书即可,证书.key就是这个一个(这针对的是下载apache跟nginx证书压缩包里的文件))
ssl_certificate ../ssl/证书.crt;
ssl_certificate_key ../ssl/证书.key;
access_log logs/kingleaderclub.access.log;
error_log logs/kingleaderclub.error.log;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #按照这个套件配置
# ^~/gateway/ 指的是包含 /gateway/ 路径的 ^是必须的,~指的是不管什么字符都可
location /{
add_header Cache-Control 'no-store';
client_max_body_size 300m;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-FORWARDED-PORT $server_port;
proxy_redirect off;
proxy_connect_timeout 1;
proxy_send_timeout 240;
proxy_read_timeout 240;
#使用的是服务器集群名字
proxy_pass http://domain_com;
}
}
}
- 修改tomcat的server.xml文件
在 Engine 标签的里面新增Value标签
如:
<Engine name="Catalina" defaultHost="域名">
<!--就是这个标签,字段解释在最后,我用的是tomcat6.0.26 httpsServerPort字段使用X-Forwarded-Port无效,所以写死了(httpServerPort,portHeader这两字段加了无用,不知道什么原因,有人知道的话可以告诉我一下)-->
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" portHeader="x-forwarded-port" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https" httpServerPort="X-Forwarded-Port" httpsServerPort="8888" />
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Realm className="org.apache.catalina.realm.DataSourceRealm" dataSourceName="jdbc/AuthDS" digest="MD5" roleNameCol="user_role" userCredCol="password" userNameCol="staffId" userRoleTable="T_USER_ROLES" userTable="T_User" />
<Host name="域名 appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<!-- <Context path="" docBase="E:\Servers\Tomcat\webapps\cci" reloadable="false" crossContext="true"/> -->
</Host>
</Engine>
- 重启nginx,tomcat访问即可,有问题留言
注:
- 这针对的是旧项目无法进行配置https的情况,并不是重0开始,如需要请留言,可以再写一篇新的
- Value标签解释
Attribute | Description |
---|---|
className | 可以自定义RemoteIPValve; |
remoteIpHeader | X-Forwarded-For属性(可以更改为其它的属性) |
internalProxies | 对x-forwarded-for 中出现的IP进行过滤,过滤的方式采用的是正则表达式; |
proxiesHeader | x-forwarded-by 属性(可以更改为其它的属性) |
requestAttributesEnabled | 当上述的几个属性开启后,通过request.getAttribute(xxx)就可以拿到原始客户端的一些信息,而不是代理服务器的;而AccessLog和Manager应用的状态监控页面中,就是通过request.getAttribute(xxx) 拿信息的,这个设置也就是可以影响这两个功能; |
trustedProxies | 与internalProxies 需要区分开来;internalProxies 是对x-forwarded-for 中出现的IP进行过滤,并不会加入到http头的x-forwarded-by 中;而这个trustedProxies 也是对x-forwarded-for 中出现的IP进行过滤,但会加入httphttp头的x-forwarded-by 中;从字面意思理解,internalProxies 可以理解为内部的代理地址(貌似是一个内部的过滤匹配或者是内部的proxy协议转换,没什么价值),而trustedProxies是可信的代理服务器的IP地址,是需要进行记录的 |
protocolHeader | http头的协议设置,如果你要检测代理是否把协议给转换了,可以设置为X-Forwarded-Proto |
portHeader | http的端口转换设置,能从http的header中拿到客户端的最原始端口 |
protocolHeaderHttpsValue | 指示最原始的客户端的传递的协议是否是https协议 |
httpServerPort | 如果设置了protocolHeader ,但没设置portHeader属性,并且是http协议的;该属性就是设置 ServletRequest.getServerPort() 的,默认如果不设置是80端口; |
httpsServerPort | 如果设置了protocolHeader ,但没设置portHeader属性,并且是https协议的;该属性就是设置 ServletRequest.getServerPort() 的,默认如果不设置是443端口; |
changeLocalPort | 端口ServletRequest.getServerPort() and ServletRequest.getLocalPort()要通过代理机制修改;那么该属性必须设置; |