Nginx虚拟主机配置
配置文件:
- nginx.conf 主配置文件
- vhost.conf 虚拟主机配置文件
nginx的主配置文件分为三个部分:
1.基础配置部分
- events配置部分
- http配置部分
- http配置部分
##===========基础配置部分================ ##--配置worker进程运行用户 #user nobody; ##--配置工作进程数目,默认为1,通常为cpu的数量或2倍cpu的数量 worker_processes 1; ##--配置全局错误日志及类型,【debug | info | notice | warn | error | crit】 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; ##--配置进程pid文件 #pid logs/nginx.pid; ============events配置部分配置工作模式与连接数============== events { ##--配置每个worker进程连接数上线,nginx支持的总连接数等于worker_processes*worker_connections worker_connections 1024; } ##=============http配置部分=============== ##配置http服务器,利用它的代理功能提供负载均衡支持 http { ##--配置nginx支持那些多媒体类型,可以在conf/mine.type查看支持那些多媒体类型 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日志存放路径,并使用上面定义的main日志格式 #access_log logs/access.log main; ##--开启高效文件传输模式 sendfile on; ##--防止网络阻塞 #tcp_nopush on; ##--长连接超时时间 #keepalive_timeout 0; keepalive_timeout 65; #gzip on; ##===配置虚拟主机 server { ##--设置监听端口 listen 80; ##--设置服务器名 server_name localhost; ##--配置字符集 #charset koi8-r; ##--配置本虚拟机的访问日志 #access_log logs/host.access.log main; ##--默认匹配/的请求,当访问路径中有/,会被该location匹配到并进行处理 location / { ##--root是配置服务器默认网站根目录位置,默认为安装nginx 的html目录 root html; ##--配置首页文件的名称 index index.html index.htm; } ##--配置404页面 #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # ##--配置50x错误页面 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 # #location ~ .php$ { # proxy_pass http://127.0.0.1; #} # 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; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
Nginx代理负载均衡
正向代理
nginx的正向代理的原理就像是一个中间人,当用户想要访问一个服务器A的时候不能直接访问,这个时候就会用到代理,用户可以先访问代理服务器B并说明自己想要干什么,再由代理服务器B去访问服务器A并进行获取用户所需要的东西,最后返回给用户。
正向代理的相关配置
server { listen 80; #监听端口为80 server_name ask.apelearn.com; #所设置的域 location / { proxy_pass http://47.104.7.242/; #真正服务器的IP proxy_set_header Host $host; #指定要访问的域名是server_name $host就是server_name proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Nginx负载均衡
当我们用户要访问服务器的时候一个服务器不够用,负载均衡的作用就是可以使用户可以在代理的基础上去访问多台服务器,这样就不会出现访问一个服务器的时候这个服务器宕机就无法访问,负载均衡还将这个请求发送到别的服务器上面。(不能代理https443)
负载均衡配置文件:
upstream baidu #定义一个upstream { ip_hash; #保证在短时间内,同一个客户端的请求不被分配到其他nginx-server上 server 220.181.38.148:80; server 39.156.69.79:80; #设置IP与监听端口 } server { listen 80; server_name baidu.com; location / { proxy_pass http://baidu; #设置成定义upstream的名字 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Nginx的SSL加密
我们在访问服务器过程中的数据包可能被截获造成信息泄露,ssl加密就会将数据包进行加密使得别人截获之后也无法对其进行解密。
SSL工作流程:
- 浏览器向服务器请求https的证书
- 服务器将公钥发送给客户端
- 客户端(浏览器)收到公钥进行验证其是否有效合法,有效则发送用公钥加密过的对称密码
- 客户端服务器进行对称秘钥传输数据
注:
l 证书就是一对公钥和私钥
l 证书可以向有关机构进行申请也可以自己制作(自己制作的证书不具有合法性)
制作证书过程:
- cd /usr/local/nginx/conf/
- openssl genrsa -des3 -out tmp.key 2048 #生成一个私钥的文件,加密长度为2048
- openssl rsa -in tmp.key -out dai.key #将刚刚生成的tmp.key再转换成dai.key。目的就是删除刚刚设置的密码,如果key文件有密码,则必须再nginx加载它的时候输入它的密码,因此很不方便。
- rm -rf tmp.key #删除最先生成的密码文件
- openssl req -new -key dai.key -out dai.csr #设置生成证书请求文件,后面会用这个文件和私钥文件生成公钥文件
- openssl x509 -req -days 365 -in dailinux.csr -signkey dai.key -out dai.crt #生成公钥文件
nginx配置SSL并测试:
.vi /usr/local/nginx/conf/vhost/ssl.conf server { listen 443; server_name dai.com; index index.html index.php; root /data/nginx/dai.com; ssl on; #支持开启ssl ssl_certificate dai.crt; #指定公钥 ssl_certificate_key dai.key; #指定私钥 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #协议 } 重新加载的时候会出现错误,需要对其重新编译。 ./configure --prefix=/usr/local/nginx/ --with-http_ssl_module make&&make install mkdir /data/nginx/dai.com echo "NGIXN SSL" > /data/nginx/dai.com/1.php #创建一个网站与内容
- 进行curl,在虚拟机上直接进行curl是会出现证书不合法,在本地进行修改配置文件使用浏览器进行访问则会出现网页不安全提示,是因为证书是自己制作的原因。