Nginx详解

一、参数详解

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协议。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值