jjnoob

nginx配置二次学习

2019-02-07
jjnoob

确实学的不牢固…. 之前跟着百度来的教程走了一遍也没有仔细学.最后 https://nav.duckduckk.top 前端代码为才越和金鹏所写,目前只是个beta版,我拿过来练手.过一段时间有空我来尝试把项目部署到docker以及学习数据库.这个过一段时间就不知道到什么时候了,懒->_->

一, nginx.conf的配置

  • /usr/local/nginx/conf/nginx.conf
  • 百度而来的注释
  • LNMP一键安装包安装
  • 安装后就这配置, 无需改动.

nginx.conf配置在本文最后面 传送. 博客字体太丑, 也可以直接去github markdown看传送


二, 域名.conf

  • 代码及每行的注释放在私密仓库中.
  • include vhost/*.conf;配置多域名(nginx.conf里面的)


三, ssl证书

SSL协议提供的安全通道有以下三个特性:

  • 机密性:SSL协议使用密钥加密通信数据。
  • 可靠性:服务器和客户都会被认证,客户的认证是可选的(Let’s Encrypt是每三个月需要重新认证一次)
  • 完整性:SSL协议会对传送的数据进行完整性检查。

端口

  • http服务使用80端口
  • https服务使用443端口


四, 301跳转

参考https://help.aliyun.com/knowledge_detail/41467.html

301跳转多用于旧网址在废弃前转向新网址以保证用户的访问.

301跳转应用场景:

  • 旧页面迁移到新页面的时候使用
  • 切换到新域名
  • 清理动态URL,切换到更短更友好的版本
  • 预防内容重复问题(多篇相似文章页可跳转成一个版本)

为无 WWW 前缀的域名配置规则并加 301 跳转时输入以下内容:(在 域名.conf 文件中添加)

server
{
listen 80;
server_name server110.com;
rewrite ^/(.*) http://www.server110.com/$1 permanent;
}


五, LNMP一键安装包

安装链接


六, 阿里云申请免费SSL证书

  • 购买Symantec 免费型DV ssl
  • 下载nginx版证书
  • 上传证书到服务器某个目录
  • 域名.conf 里面添加相关配置


七, git报错

两个报错都遇到了…

参考https://blog.csdn.net/sinat_20177327/article/details/76062030

git remote add origin https://github.com/CongliYin/CSS.git

若出现:

fatal: remote origin already exists,

git remote rm origin
git remote add origin https://github.com/CongliYin/CSS.git

git push origin master

若出现:

failed to push som refs to…….

git pull origin master


八, nginx权限问题

参考https://www.jianshu.com/p/ca28ccb35b68

  • 普通用户只能用1024以上的端口,1024以内的端口只能由root用户使用.
  • nginx使用的80端口和443端口,都需要超级用户启动.

给非root用户添加特殊权限即可

chown root /usr/local/nginx/sbin/nginx
chmod u+s /usr/local/nginx/sbin/nginx


九, SSL不完全安全

参考https://blog.csdn.net/u013829518/article/details/80742700

用浏览器访问 https://nav.duckduckk.top 时发现浏览器地址栏没有小锁. 并提示 您与该网站的连接不完全安全.

这种情况是网站代码不符合SSL证书规范导致的

简单来说就是: 网站内所有的外部引入(CSS,JS,图片等的引入链接)都得是https, 而不能是http.



另: nginx.conf配置如下

user  www www; #运行用户;若编译时指定了用户nginx,则用户为nginx;master进程要由root运行,因为要监听套接字; 

worker_processes auto;  #也可以设置成 worker_processes 2; 设置值和CPU核心数一致

error_log  /home/wwwlogs/nginx_error.log  crit; #日志位置和日志级别

pid        /usr/local/nginx/logs/nginx.pid;  #nginx的pid文件路径

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;  #指定一个worker进程最多打开的文件数,也可以是其他数字;

events  #events段
    {  
        use epoll;  #使用epoll的I/O 模型。linux使用epoll,FreeBSD使用采用kqueue,window下不指定。epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
        worker_connections 51200;  #定义每个worker进程最大并发连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections。
        multi_accept on; #打开同时接受多个新网络连接请求的功能。只能在events模块设置,Nginx服务器的每个工作进程可以同时接受多个新的网络连接,但是需要在配置文件中配置,此指令默认为关闭,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个,配置语法如下:
    }

http
    {
        include       mime.types;  #文件扩展名与类型映射表
        default_type  application/octet-stream; #默认文件类型

        server_names_hash_bucket_size 128; #这四行起到设定请求缓存的作用
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile   on; #开启高效传输模式
        tcp_nopush on;  #激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布,积极的作用是减少网络报文段的数量

        keepalive_timeout 60; #连接超时时间,单位是秒

        tcp_nodelay on; #激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能

        fastcgi_connect_timeout 300; #以下都是FastCGI相关参数,为了改善网站性能,减少资源占用,提高访问速度
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;

        gzip on; #开启gzip压缩功能
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2; #压缩级别,1最小最快,9最大最慢
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";

        #limit_conn_zone $binary_remote_addr zone=perip:10m;
        ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.

        server_tokens off; #隐藏nginx版本号,安全起见
        access_log off; #不记录日志

server
    {
        listen 80 default_server; #监听80端口
        #listen [::]:80 default_server ipv6only=on;
        server_name _; #server_name localhost;中的localhost为域名
        index index.html index.htm index.php; #用户访问web网站时的全局首页
        root  /home/wwwroot/default; #表示整个server虚拟主机内的根目录,所有当前主机中web项目的根目录

        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php.conf;

        location /nginx_status
        {
            stub_status on; #nginx中的stub_status模块主要用于查看Nginx的一些状态信息.如果默认没有安装,需要编译安装.
            access_log   off; #不记录日志
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ #利用客户端来缓存网站上不经常变更的图片等内容,给服务器减压.
        {
            expires      30d; #把数据在客户端(貌似是浏览器)缓存30天
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h; #同理,把js,css在客户端缓存12小时.
        }

        location ~ /.well-known {  #使用Let's Encrypt证书部署HTTPS,进行一系列配置之后需要在nginx的server块里添加这段代码
            allow all;
        }

        location ~ /\. #这样所有隐藏文件都不会以URL方式打开了,这里有很多种限制方式,日后需要进一步学习.
        {
            deny all;
        }

        access_log  /home/wwwlogs/access.log; #配置access log日志的存储位置及文件
    }
include vhost/*.conf;  #nginx支持include配置文件,如果我们的域名都配置到nginx.conf.这个文件就会比较乱.所以直接拆分出来,分成不同的配置文件.再重启nginx即可.
}

Content