欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Nginx配置总结

程序员文章站 2022-05-02 08:32:03
...
修改nginx服务器配置,在conf文件下的nginx.conf文件。
#user nobody;   #运行用户#worker_processes 1;    #启动进程数,通常设置成和cpu数目相同#error_log /var/log;    #错误日志
events {
    worker_connections 1024;#单个后台work process进程最大并发链接数
}

#设定http服务器
http{
     #设定mime类型,类型由mime.type文件定义
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    #设定日志格式
    access_log    /var/log/nginx/access.log;
    sendfile on;
    #连接超时时间#keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    #集群中的所有后台服务器的配置信息,用于负载均衡
    upstream local_tomcat{
        server 192.168.0.111:80;
        server 192.168.0.109:8080;
    }
    server{
        listen 8090;    #当前代理服务器监听端口
        server_name  localhost:80;  #监听后要转到地址#charset koi8-r;#access_log  logs/host.access.log  main;        location / {    #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   500502503504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

常见问题总结:
1. nginx+tomcat影响request值
request.getScheme() //总是 http,而不是实际的http或https
request.isSecure() //总是false(因为总是http)
request.getRemoteAddr() //总是 nginx 请求的 IP,而不是用户的IP
request.getRequestURL() //总是 nginx 请求的URL 而不是用户实际请求的 URL
request.getServerName //总是nginx请求的ip
request.getServerPort //总是nginx请求的端口
response.sendRedirect( 相对url ) //总是重定向到 http 上 (因为认为当前是 http 请求)
解决方法:
修改nginx配置:

proxy_set_header Host $host;   #解决getRequestURL、getServerName、getServerPort问题
proxy_set_header X-Real-IP $remote_addr;#把真实的ip发送给转发的web服务器
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#解决request.getScheme()只能返回http而不是https问题

配置tomcat的server.xml的Engine模块,配置一个value

ValveclassName="org.apache.catalina.valves.RemoteIpValve"remoteIpHeader="X-Forwarded-For"protocolHeader="X-Forwarded-Proto"protocolHeaderHttpsValue="https" />