一、参数详解
user nginx;
#工作进程数量,自动(按照CPU核心数产生工作进程),一般设置为和 CPU 核数一样。
worker_processes auto;
#全局错误日志及PID文件
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
#工作模式及连接数上限
events {
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,
#仅用于linux2.6以上内核,可以大大提高nginx的性能
use epoll;
#单个后台worker process进程的最大并发链接数
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;
#gzip on;
#负载均衡,将server模块中的完全反向代理的ip换成upstream的组名,即可实现。
upstream abc {
server 192.168.88.110:80;
server 192.168.88.130:80;
}
server {
listen 80;
server_name localhost;
#main开启的时候记得取消上方(log_format main)的注释,进行调用
access_log logs/host.access.log main;
#location后面的/指的是nginx网页的目录
location / {
#Nginx的默认网页路径:PREFIX/html
root html;
#设置默认加载的页面,以及优先级
index index.html index.htm index.php;
#完全反向代理
proxy_pass http://192.168.88.110:80;
#正向代理
#resolver 8.8.8.8;
#proxy_pass $scheme://$host$request_uri;
}
#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;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#当网站的后缀名为.php结尾时,将此请求交给http后的网站进行访问。
#location ~ \.php$ {
# proxy_pass http://127.0.0.1:80;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
#正向代理
server {
listen 8888;
resolver 8.8.8.8;
location / {
# 使用客户端请求的 Host
proxy_pass $scheme://$http_host$request_uri;
proxy_set_header Host $http_host;
}
}
# HTTPS server
#
server {
#这两行配置表示 Nginx 将监听 IPv4 和 IPv6 的 443 端口,并为通过此端口的连接启用 SSL/TLS 加密及 HTTP/2 协议。
listen 443 ssl http2;
listen [::]:443 ssl http2;
#_ 是一个特殊的通配符,表示该 server 块将接受所有域名的请求。这个设置通常在没有其他具体 server_name 匹配时作为默认配置使用。
server_name _;
#指定了 Nginx 提供静态文件时的根目录。如果请求的文件在这个目录中找到,Nginx 将直接提供这个文件。
root /usr/share/nginx/html;
#指定了在请求到达目录时默认提供哪个文件。如果 URL 对应的是一个目录而不是一个文件,Nginx 会尝试按顺序寻找并提供 index.html 或 index.htm 文件。
index index.html index.htm;
#证书和私钥文件路径
ssl_certificate "/etc/nginx/ssl/oss.crt";
ssl_certificate_key "/etc/nginx/ssl/oss.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
#完全反向代理,后端服务器的协议,域名或地址,https,或http。
proxy_pass http://oss-cn-chengdu-scyc-d01-a.ops.scyc.yun:80;
#当使用 proxy_pass 时,这一行配置告诉 Nginx 不验证 SSL/TLS 证书的合法性。这通常用于内部或受信任的网络,但在公网上可能会导致安全问题,所以应该谨慎使用。
proxy_ssl_verify off;
#传递给代理服务器的 HTTP 头部信息
#原始请求的 Host 头部
proxy_set_header Host $host;
#客户端的真实 IP 地址
proxy_set_header X-Real-IP $remote_addr;
#包含了客户端的真实 IP 地址及任何中间代理服务器的地址的列表。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#原始请求使用的协议(自动匹配http或https),客户端到nginx代理的请求协议,与nginx到后端服务器的请求协议无关。
proxy_set_header X-Forwarded-Proto $scheme;
}
#指定正确与错误日志的路径(未指定,默认在/var/log/下),注意:日志所在目录的所有者和所属组,需修改为nginx的运行用户。
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
二、nginx实现http强制跳转https
1.安装nginx
yum -y install nginx
#yum安装nginx,需要先安装epel-release扩展源
2.启动nginx
nginx #启动nginx
nginx -s stop #停止服务
nginx -s reload #不暂停服务的情况下,重启服务。
nginx -t #语法检查功能
3.浏览器访问本机IP测试
http://IP地址
4.在主配置文件中调用加密的模板
vim /etc/nginx/nginx.conf
#在对应要进行加密的server标签中添加以下内容开启SSL
server {
listen 443 ssl;
root html;
index index.html index.htm;
server_name www.aaa.com;
ssl_certificate /etc/nginx/ssl/aaa.crt;
ssl_certificate_key /etc/nginx/ssl/aaa.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
access_log logs/access.log main;
}
5.生成证书文件
mkdir /etc/nginx/nginx.conf/ssl
#创建证书存放目录
openssl genrsa -out aaa.key 1024
#建立服务器私钥,生成RSA密钥
openssl req -new -key aaa.key -out aaa.csr
#需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书.
openssl x509 -req -days 365 -sha256 -in aaa.csr -signkey aaa.key -out aaa.crt
#生成签字证书
6.重启nginx
nginx -s reload
7.浏览器测试https访问
https://IP地址
8.设置http自动跳转https功能
server {
..........;
listen 443;
}
新增原有80server标签的以下内容(利用虚拟主机+rewrite的功能)
server{
listen 80;
server_name www.aaa.com;
rewrite ^(.*)$ https://www.aaa.com/$1;
root html;
index index.html index.htm;
}
#新版本重写
#server {
# listen 80;
# server_name yourdomain.com;
# return 301 https://$server_name$request_uri;
#}
#ssl的证书密钥位置放在443的虚拟主机内才有用。
#windows中的hosts文件记得解析
9.重启nginx,并测试http://IP地址
结果可以看到,http强制跳转到了https协议。