• Category Archives: nginx

nginx要注意的并发配置

单核所能产生的线程数问题

nginx默认只使用cpu的一个核,单核支持的线程数是1024,意味着超过1024就会崩

需要在配置中加上:worker_processes 4 (数字“4”为您所需要使用的核数)

单个文件访问数量的问题

nginx默认只允许单个文件被4096个线程打开,意味着如果nginx的线程超过4096也会崩,哪怕设置CPU核数大于4个

需要在配置中加上:worker_rlimit_nofile 32768

123

nginx安装ssl证书后, 安卓机下https提示SSL警告, 且微信端打开空白

西部数码推出了免费的ssl证书, 办法机构是 trustAsia.

根据流程申请后, 并且使用nginx配置我的证书后, 看上去一切正常.

但是此时同事发来贺电说打开空白…

总结情况就是: 苹果机访问一切正常, 但是安卓机的微信端访问空白, 安卓机的自带浏览器提示SSL警告.

123

这是 联想乐檬X3 LITE 自带浏览器访问的结果.

 

于是我怀疑是不是证书域名打错了? 检查了后不是.

于是在想会不会微信对这个机构颁发的证书不信任? 但是查询了一下腾讯自己也有申请这一个证书的功能, 腾讯不会不支持自家的东西.

但是我以前弄过另外一个项目是正常的, 为什么这次不正常?

于是对比了一下nginx的证书配置, 以前的项目我是使用了pem+key证书的搭配, 这个出问题的项目使用的是cer+key的搭配. 于是我通过网站在线合成pem的网页把cer和key合成为pem证书后使用(也就是pem+key的模式), 结果一切正常..! 问题到此已经解决…

为什么会这样呢? 由于没有时间去深入研究, 所以这个问题留给大家去研究啦..!

 

Nginx SSL+tomcat集群,request.getScheme() 取到https正确的协议

最近做的一个项目, 需要使用 tomcat 集群, 且项目需要使用https协议

但是,明明是https url请求, 但是java里的 request.getScheme() 的输出却是 http

request.getRequestURL() 输出出来的 一直是
http://xxxxxxxxx/abc?value=123
但是浏览器中的URL却是
https://xxxxxxxxx/abc?value=123
查阅了一些资料,找到了解决方案:
解决方法很简单,只需要分别配置一下 Nginx 和 Tomcat 就好了,而不用改程序。
配置 Nginx 的转发选项:
proxy_set_header       Host $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;

配置Tomcat server.xml 的 Engine 模块下配置一个 Valve:

	<Valve className="org.apache.catalina.valves.RemoteIpValve"  
                  remoteIpHeader="x-forwarded-for"  
                  remoteIpProxiesHeader="x-forwarded-by"  
                  protocolHeader="x-forwarded-proto"
                  protocolHeaderHttpsValue="https"/>

配置双方的 X-Forwarded-Proto 就是为了正确地识别实际用户发出的协议是 http 还是 https。

这样以上5项测试就都变为正确的结果了,就像用户在直接访问 Tomcat 一样。

 

参考资料:

http://www.th7.cn/Program/java/201608/929190.shtml

http://blog.csdn.net/pwq296306654/article/details/51760844

http://feitianbenyue.iteye.com/blog/2056357

使用nginx 反向代理实现负载均衡解决HTTPS 证书问题

由于项目需要 负载均衡由NBL 转成nginx 反向代理。考虑都是https模块,所以证书成了个难题。

解决方案:

1.下载openssl(windows 安装包)

2.打开bin/下面的openssl.exe

3.再原来的IIS上面把证书导出.pfx(域服务器证书申请,主要适用域内)

4.利用openssl 进行转化:

openssl pkcs12 -in server.pfx -nodes -out server.pem # 生成明文所有内容
openssl rsa -in server.pem -out server.key # 取 key 文件
openssl x509 -in server.pem -out server.crt # 取证书

5.nginx 上面开始配置:

upstream backend
{
#ip_hash;
server 10.1.0.245:81;
server 10.1.0.42:81;
}
    server {
        listen     80;
        listen     443 ssl;
        server_name  office.dahuatech.com;
        ssl_certificate      server.crt;
        ssl_certificate_key  server.key;
        #ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        #ssl_prefer_server_ciphers  on;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;

      location / {
        proxy_pass  http://backend;
        #Proxy Settings
        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;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
        }

按照上面配置就可以。这样域内所有的用户都可以在信任证书内。

记录下 送给需要的人

OPENSSL 安装包下载:Win32OpenSSL-0_9_8l.zip

CentOS 6/7 下使用yum安装nginx

Ubuntu下安装nginx,直接apt-get install nginx就行了,很方便。

但是今天装了CentOS6.2,直接yum install nginx不行,要先处理下源,下面是安装完整流程,也十分简单:

1、运行并安装源:

CentOS 7 下使用这个命令

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

CentOS 6 下使用这个命令

rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

2,查看yum的nginx信息

[]# yum info nginx

Loaded plugins: fastestmirror

Determining fastest mirrors

 * base: mirror.esocc.com

 * extras: mirror.esocc.com

 * updates: mirror.esocc.com

base                                                     | 3.7 kB     00:00     

base/primary_db                                          | 4.4 MB     00:28     

extras                                                   | 3.5 kB     00:00     

extras/primary_db                                        |  19 kB     00:00     

nginx                                                    | 2.9 kB     00:00     

nginx/primary_db                                         |  22 kB     00:00     

updates                                                  | 3.5 kB     00:00     

updates/primary_db                                       | 2.1 MB     00:10     

Installed Packages

Name        : nginx

Arch        : x86_64

Version     : 1.4.0

Release     : 1.el6.ngx

Size        : 874 k

Repo        : installed

From repo   : nginx

Summary     : nginx is a high performance web server

URL         : http://nginx.org/

License     : 2-clause BSD-like license

Description : nginx [engine x] is an HTTP and reverse proxy server, as well as

            : a mail proxy server

3,安装nignx
[root@server ~]# yum install nginx

4,启动nginx

CentOS 7 下使用这个命令:

systemctl start nginx

CentOS 6 下使用这个命令

service nginx start

4,然后进入浏览器,输入http://xxxxxxx/测试,如果看到

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

恭喜你,你成功了!

5、设置为开机启动

CentOS 7 下使用这个命令

systemctl enable nginx.service

CentOS 6下使用这个命令

chkconfig nginx on

 

close