1. 서문
# ssl写在443端口后面。这样http和https的链接都可以用 listen 443 ssl http2 default_server; server_name chat.chengxinsong.cn; # hsts的合理使用,max-age表明hsts在浏览器中的缓存时间,includesubdomainscam参数指定应该在所有子域上启用hsts,preload参数表示预加载,通过strict-transport-security: max-age=0将缓存设置为0可以撤销hsts add_header strict-transport-security "max-age=63072000; includesubdomains; preload"; ssl_certificate /usr/local/nginx/cert/2540136_chat.chengxinsong.cn.pem; ssl_certificate_key /usr/local/nginx/cert/2540136_chat.chengxinsong.cn.key; # 分配20mb的共享内存缓存,不同工作进程共享tls会话信息 # ssl_session_cache shared:ssl:20m; # 设置会话缓存过期时间1h ssl_session_timeout 60m; # tls协议的合理配置 # 指定tls协议的版本,不安全的ssl2和ssl3要废弃掉 ssl_protocols tlsv1 tlsv1.1 tlsv1.2; # 启用ssl_prefer_server_ciphers,用来告诉nginx在tls握手时启用服务器算法优先,由服务器选择适配算法而不是客户端 ssl_prefer_server_ciphers on; # 优先选择支持前向加密的算法,且按照性能的优先顺序排列 ssl_ciphers ecdhe-rsa-aes128-gcm-sha256:ecdhe:ecdh:aes:high:!null:!anull:!md5:!adh:!rc4; # 会话恢复的合理使用 # 配置会话票证,减少了tls握手的开销 ssl_session_tickets on;
그런 다음 nginx 구성 확인을 실행합니다. nginx -t
은 http2.0에 ngx_http_v2_module이 없음을 의미합니다. nginx에는 http_ssl_module 모듈이 없습니다. 컴파일하고 설치할 때 --with-http_ssl_module 구성을 가져오세요.
2. 정보를 검색하여 이유를 찾으세요
위의 이유는 nginx가 1.9.5부터 ngx_http_spdy_module 모듈을 http_v2_module 모듈로 대체하고, 공식적으로 http2 프로토콜을 지원하기 시작했기 때문입니다.
하지만 내 nginx는 1.12.2입니다. ngin 버전에서는 문제가 되지 않습니다
참고:
1 그리고 openssl 라이브러리 버전은 1.0.2 이상에서 컴파일해야 합니다. 1. http/2 프로토콜 지원을 활성화하려면 nginx 1.10 이상 및 openssl 라이브러리 버전 1.0.2 이상을 컴파일해야 합니다.
2.http2.0은 https가 활성화된 웹사이트만 지원합니다.
서버의 openssl 라이브러리 버전일 수도 있는데, 1.0.2로 확인됩니다.
그래서 여전히 더 높은 포인트로 업그레이드해야 합니다.
3. openssl 업그레이드
http2.0 프로토콜에서는 alpn(애플리케이션 계층 프로토콜 협상, 애플리케이션 계층 프로토콜 협상) 지원이 포함됩니다. 현재 모든 주류 Unix 서버 시스템에 내장된 openssl 라이브러리는 다음과 같습니다. 1.0 .2 버전보다 낮습니다. openssl의 명령줄 도구를 사용하면 현재 http2 서비스가 alpn을 지원하는지 확인할 수 있습니다.
설치 디렉터리 찾기
1. 최신 버전의 openssl 라이브러리를 다운로드하고
wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz tar xzf openssl-1.1.0f.tar.gz cd openssl-1.1.0f ./config --prefix=/usr/local/openssl make && make install
2. 이전 버전 라이브러리를 교체하세요
mv /usr/bin/openssl /usr/bin/openssl.old mv /usr/include/openssl /usr/include/openssl.old ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl ln -s /usr/local/openssl/include/openssl /usr/include/openssl #链接新库文件 ln -s /usr/local/openssl/lib/libssl.so /usr/local/lib64/libssl.so ln -s /usr/local/openssl/lib/libcrypto.so /usr/local/lib64/libcrypto.so #检查更新后的openssl依赖库是否是1.1.0f strings /usr/local/lib64/libssl.so | grep openssl #显示结果表明已升级到最新版本链接库 openssl 1.1.0f 25 may 2017 #配置openssl库文件的搜索路径 echo '/usr/local/openssl/lib' >> /etc/ld.so.conf #使修改后的搜索路径生效 ldconfig -v #查看openssl版本,结果显示升级成功 openssl version openssl 1.1.0f 25 may 2017
4. nginx SSL 모듈을 활성화하세요
기본적으로 컴파일된 nginx는 그렇지 않습니다. h2 모듈을 포함합니다. 컴파일할 매개변수를 추가해야 합니다. 게시 시점을 기준으로 nginx 1.9 개발 버전 이상의 소스 코드는 소프트웨어 소스 웨어하우스에서 다운로드한 것들은 기본적으로 컴파일 매개변수를 추가해야 합니다. . nginx는 더 이상 spdy를 지원하지 않습니다.
컴파일한 nginx가 이를 지원하지 않는 경우 ./configure에 --with-http_v2_module을 추가하세요. SSL 지원이 없으면 --with-http_ssl_module
1도 추가해야 합니다. 코드 패키지를 다운로드하여 구성 지원 http2
에 있는지 확인하세요. 이때 다운로드 시 소스 코드 폴더에서 이 구성을 찾아야 합니다. 참고: 컴파일 후 폴더는 아닙니다.
"./configure" 구성에서 "--with"는 모듈을 활성화한다는 의미입니다. 즉, "--without"은 모듈을 비활성화한다는 의미입니다. 이는 이러한 모듈이 컴파일 중에 자동으로 빌드되지 않음을 의미합니다. nginx를 가볍게 실행하려면 불필요한 모듈을 제거할 수 있습니다.
Execute ./configure --help
위 그림에서 우리는 nginx가 컴파일할 때 http_ssl_module과 http_v2_module을 자동으로 빌드하지 않는다는 것을 알 수 있습니다. 따라서 nginx를 다시 컴파일해야 합니다.
2. 매개변수 컴파일 추가
새 구성 정보는 다음과 같이 작성해야 합니다.
./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_ssl_module --with-openssl=/home/soft/openssl-1.1.0f
위의 /usr/local/nginx 경로는 컴파일 후의 패키지 경로입니다.
그런 다음 ./configure에 --with-http_v2_module을 추가하세요. SSL 지원이 없으면 --with-http_ssl_module도 추가해야 하며, 방금 1.1.0으로 업데이트된 openssl도 추가해야 합니다. with-openssl =/home/soft/openssl-1.1.0f.
구성이 완료된 후 위 명령을 실행하세요
구성이 완료된 후
make
여기에서 make install을 수행하지 마세요. 그렇지 않으면 덮어쓰기 설치가 됩니다
3.
(1) 그런 다음 원본을 백업합니다. 이미 설치된 nginx가 있습니다cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_07_22.bak
./nginx -s quit
cp ./objs/nginx /usr/local/nginx/sbin/
1분 정도 기다리면 http2.0의 효과를 볼 수 있습니다.
5. 해당 웹사이트가 http2.0
이름을 마우스 오른쪽 버튼으로 클릭하여 프로토콜을 확인하면 http 프로토콜을 확인할 수 있습니다.위 내용은 HTTP2.0을 지원하도록 nginx를 업그레이드하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!