吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6834|回复: 11
收起左侧

[Java 转载] Linux下安装nginx并配置https

  [复制链接]
简单美好King 发表于 2019-2-27 11:25
本帖最后由 简单美好King 于 2019-2-27 11:29 编辑

Nginx安装

快速安装的Shell脚本

脚本2019年2月15日的稳定版本

注意自己现在所在根目录 /

新建脚本

vim nginx-install.sh
#!/bin/bash
echo "开始执行" 

cd /usr/local

wget http://nginx.org/download/nginx-1.14.2.tar.gz && tar -zvxf nginx-1.14.2.tar.gz

cd nginx-1.14.2

yum -y install gcc-c++ && yum -y install pcre pcre-devel && yum -y install zlib zlib-devel && yum -y install openssl openssl-devel

mkdir -p /var/temp/nginx

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/usr/local/nginx/log/error.log \
--http-log-path=/usr/local/nginx/log/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

make && make install

echo "安装完毕"

执行脚本

chmod +x nginx-install.sh

./nginx-install.sh

启动nginx

cd /usr/local/nginx
./nginx

手动下载并安装

1).下载地址:

nginx官网

2).安装

Windows用户可以跳过

nginx下载地址

Linux安装

注意 一切目录在于 /user/nginx

注:没有wegt 安装

-> yum -y install wget*

1.下载nginx

->wget http://nginx.org/download/nginx-1.10.3.tar.gz

2.解压

->tar -zvxf nginx-1.10.3.tar.gz

因为下载的为源码包,需要进行编译,所以需要gcc,pcre  ,zlib ,openssl 等环境
3.安装这些环境

(1).总的一句话代码

->yum -y install gcc-c++ &&  yum -y install pcre pcre-devel &&  yum -y install zlib zlib-devel && yum -y install  openssl openssl-devel

(2).分开书写,方便查错
安装gcc  #

-> yum -y install gcc-c++

安装 pcre  #

-> yum -y install pcre pcre-devel

安装 zlib #

-> yum -y install zlib zlib-devel

安装 openssl #

-> yum -y install  openssl openssl-devel

4.生成make
假设你的解压目录在 user/nginx

解压nginx
进入文件夹
进入文件夹后发现没有make   这样就无法编译  

创建一个nginx临时目录  :

->mkdir -p /var/temp/nginx

执行 configure命令    (后面的参数别硬记,没必要)

./configure \
--prefix=/user/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

5.make && make install

  1. /user/local目录下有了nginx
  2. cd  /user/local/nginx/sbin
  3. ./nginx

访问http://ip/

3).启动

解压,运行(nginx -c conf/nginx.conf),默认使80端口,日志见于logs

netstat -ano 命令查看端口使用情况
services.msc 启动或停用服务

启动注意端口是否被占用,apache/tomcat等
启动类似frp等反向代{过}{滤}理

4).使用

http://localhost/
注:443 https访问 https://localhost/
这里写图片描述
正常显示这个,如果显示Apache,等,但是nginx又启动成功没有报错。我出现过。
是浏览器缓存的原因,不知道说好还是坏。转换浏览器模式,内核,极速等。尝试下

nginx相关操作

nginx 服务器重启命令,关闭
nginx -s reload  :修改配置后重新加载生效
nginx -s reopen  :重新打开日志文件
nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确

关闭nginx:
nginx -s stop  :快速停止nginx
quit  :完整有序的停止nginx

其他的停止nginx 方式:

ps -ef | grep nginx

kill -QUIT 主进程号     :从容停止Nginx
kill -TERM 主进程号     :快速停止Nginx
pkill -9 nginx          :强制停止Nginx

启动nginx:
nginx -c /path/to/nginx.conf

平滑重启nginx:
kill -HU#主进程号

conf详细说明明


conf配置说明原文:http://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html

#运行用户  
user www-data;      
#启动进程,通常设置成和cpu的数量相等  
worker_processes  1;  

#全局错误日志及PID文件  
error_log  /var/log/nginx/error.log;  
pid        /var/run/nginx.pid;  

#工作模式及连接数上限  
events {  
    use   epoll;             #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能  
    worker_connections  1024;#单个后台worker process进程的最大并发链接数  
    # multi_accept on;   
}  

#设定http服务器,利用它的反向代{过}{滤}理功能提供负载均衡支持  
http {  
     #设定mime类型,类型由mime.type文件定义  
    include       /etc/nginx/mime.types;  
    default_type  application/octet-stream;  
    #设定日志格式  
    access_log    /var/log/nginx/access.log;  

    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,  
    #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.  
    sendfile        on;  
    #tcp_nopush     on;  

    #连接超时时间  
    #keepalive_timeout  0;  
    keepalive_timeout  65;  
    tcp_nodelay        on;  

    #开启gzip压缩  
    gzip  on;  
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";  

    #设定请求缓冲  
    client_header_buffer_size    1k;  
    large_client_header_buffers  4 4k;  

    include /etc/nginx/conf.d/*.conf;  
    include /etc/nginx/sites-enabled/*;  

    #设定负载均衡的服务器列表  
     upstream mysvr {  
    #weigth参数表示权值,权值越高被分配到的几率越大  
    #本机上的Squid开启3128端口  
    server 192.168.8.1:3128 weight=5;  
    server 192.168.8.2:80  weight=1;  
    server 192.168.8.3:80  weight=6;  
    }  

   server {  
    #侦听80端口  
        listen       80;  
        #定义使用www.xx.com访问  
        server_name  www.xx.com;  

        #设定本虚拟主机的访问日志  
        access_log  logs/www.xx.com.access.log  main;  

    #默认请求  
    location / {  
          root   /root;      #定义服务器的默认网站根目录位置  
          index index.php index.html index.htm;   #定义首页索引文件的名称  

          fastcgi_pass  www.xx.com;  
         fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;   
          include /etc/nginx/fastcgi_params;  
        }  

    # 定义错误提示页面  
    error_page   500 502 503 504 /50x.html;    
        location = /50x.html {  
        root   /root;  
    }  

    #静态文件,nginx自己处理  
    location ~ ^/(images|javascript|js|css|flash|media|static)/ {  
        root /var/www/virtual/htdocs;  
        #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。  
        expires 30d;  
    }  
    #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.  
    location ~ \.php$ {  
        root /root;  
        fastcgi_pass 127.0.0.1:9000;  
        fastcgi_index index.php;  
        fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;  
        include fastcgi_params;  
    }  
    #设定查看Nginx状态的地址  
    location /NginxStatus {  
        stub_status            on;  
        access_log              on;  
        auth_basic              "NginxStatus";  
        auth_basic_user_file  conf/htpasswd; 

        deny all;  
    }  

     }  
}  

以上是一些基本的配置,使用Nginx最大的好处就是负载均衡

如果要使用负载均衡的话,可以修改配置http节点如下:

#设定http服务器,利用它的反向代{过}{滤}理功能提供负载均衡支持  
http {  
     #设定mime类型,类型由mime.type文件定义  
    include       /etc/nginx/mime.types;  
    default_type  application/octet-stream;  
    #设定日志格式  
    access_log    /var/log/nginx/access.log;  

    #省略上文有的一些配置节点  

    #。。。。。。。。。。  

    #设定负载均衡的服务器列表  
     upstream mysvr {  
    #weigth参数表示权值,权值越高被分配到的几率越大  
    server 192.168.8.1x:3128 weight=5;#本机上的Squid开启3128端口  
    server 192.168.8.2x:80  weight=1;  
    server 192.168.8.3x:80  weight=6;  
    }  

   upstream mysvr2 {  
    #weigth参数表示权值,权值越高被分配到的几率越大  

    server 192.168.8.x:80  weight=1;  
    server 192.168.8.x:80  weight=6;  
    }  

   #第一个虚拟服务器  
   server {  
    #侦听192.168.8.x的80端口  
        listen       80;  
        server_name  192.168.8.x;  

      #对aspx后缀的进行负载均衡请求  
    location ~ .*\.aspx$ {  

         root   /root;      #定义服务器的默认网站根目录位置  
          index index.php index.html index.htm;   #定义首页索引文件的名称  

          proxy_pass  http://mysvr ;#请求转向mysvr 定义的服务器列表  

          #以下是一些反向代{过}{滤}理的配置可删除.  

          proxy_redirect off;  

          #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP  
          proxy_set_header Host $host;  
          proxy_set_header X-Real-IP $remote_addr;  
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
          client_max_body_size 10m;    #允许客户端请求的最大单文件字节数  
          client_body_buffer_size 128k;  #缓冲区代{过}{滤}理缓冲用户端请求的最大字节数,  
          proxy_connect_timeout 90;  #nginx跟后端服务器连接超时时间(代{过}{滤}理连接超时)  
          proxy_send_timeout 90;        #后端服务器数据回传时间(代{过}{滤}理发送超时)  
          proxy_read_timeout 90;         #连接成功后,后端服务器响应时间(代{过}{滤}理接收超时)  
          proxy_buffer_size 4k;             #设置代{过}{滤}理服务器(nginx)保存用户头信息的缓冲区大小  
          proxy_buffers 4 32k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置  
          proxy_busy_buffers_size 64k;    #高负荷下缓冲大小(proxy_buffers*2)  
          proxy_temp_file_write_size 64k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传  

       }  

     }  
}  

关于负载均衡

拓展:

1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.159.10 weight=10;
server 192.168.159.11 weight=10;
}

3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream resinserver{
ip_hash;
server 192.168.159.10:8080;
server 192.168.159.11:8080;
}

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream resinserver{
server server1;
server server2;
fair;
}

5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

upstream resinserver{
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}

tips:

upstream resinserver{#定义负载均衡设备的Ip及设备状态
ip_hash;
server 127.0.0.1:8000 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6801;
server 127.0.0.1:6802 backup;
}

在需要使用负载均衡的server中增加
proxy_pass http://resinserver/;

每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配.可以进行重定向或者进行新的代{过}{滤}理 负载均衡

nginx配置ssl证书,微信小程序服务器

server {
    server_name 192.168.1.100; # 客户端直接用IP来访问
    # 这是默认的SSL端口,可以修改为其它端口,浏览器用https访问url时,默认就是用这个端口,
    # 如果下面listen修改成其它端口,那浏览器用https访问时,就要指定端口了。
    listen 443; 
    ssl on;
    #地址
    ssl_certificate /home/xiaobai/server_cert.crt;
    #使用无密码私钥
    ssl_certificate_key /usr/xiaobai/private.key;
}

详细 有针对性配置:http://www.cnblogs.com/ajianbeyourself/p/3898911.html

腾讯云Nginx证书配置

2. Nginx 证书部署

2.1 获取证书

Nginx文件夹内获得SSL证书文件 1_www.domain.com_bundle.crt 和私钥文件 2_www.domain.com.key,
1_www.domain.com_bundle.crt 文件包括两段证书代码 “-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”,
2_www.domain.com.key 文件包括一段私钥代码“-----BEGIN RSA PRIVATE KEY-----”和“-----END RSA PRIVATE KEY-----”。

2.2 证书安装

将域名 www.domain.com 的证书文件1_www.domain.com_bundle.crt 、私钥文件2_www.domain.com.key保存到同一个目录,例如/usr/local/nginx/conf目录下。
更新Nginx根目录下 conf/nginx.conf 文件如下:

server {
        listen 443;
        server_name www.domain.com; #填写绑定证书的域名
        ssl on;
        ssl_certificate 1_www.domain.com_bundle.crt;
        ssl_certificate_key 2_www.domain.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
        ssl_prefer_server_ciphers on;
        location / {
            root   html; #站点目录
            index  index.html index.htm;
        }
    }
配置完成后,先用bin/nginx –t来测试下配置是否有误,正确无误的话,重启nginx。就可以使 https://www.domain.com 来访问了。

注:

配置文件参数        说明
listen 443        SSL访问端口号为443
ssl on        启用SSL功能
ssl_certificate        证书文件
ssl_certificate_key        私钥文件
ssl_protocols        使用的协议
ssl_ciphers        配置加密套件,写法遵循openssl标准
2.3 使用全站加密,http自动跳转https(可选)

对于用户不知道网站可以进行https访问的情况下,让服务器自动把http的请求重定向到https。
在服务器这边的话配置的话,可以在页面里加js脚本,也可以在后端程序里写重定向,当然也可以在web服务器来实现跳转。Nginx是支持rewrite的(只要在编译的时候没有去掉pcre)
在http的server里增加rewrite ^(.*) https://$host$1 permanent;
在80端口上 添加 rewrite     ^   https://$server_name:443$request_uri? permanent;

 server {
        listen       80;
        server_name  localhost;
        rewrite     ^   https://$server_name:443$request_uri? permanent;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

这样就可以实现80进来的请求,重定向为https了。

关于Nginx的配置

location配置

location 匹配完毕后会将 url全部拼接到 root

alias 则不会匹配



免费评分

参与人数 10吾爱币 +12 热心值 +9 收起 理由
FCZE + 1 我很赞同!
wapj8685315 + 1 + 1 热心回复!
agassi241 + 1 + 1 用心讨论,共获提升!
没伞的孩子 + 1 + 1 用心讨论,共获提升!
ibrucekong + 1 + 1 谢谢@Thanks!
呵呵0214 + 1 我很赞同!
yuelass + 1 + 1 我很赞同!
琴似蓝调 + 1 + 1 谢谢@Thanks!
曾经流过的泪 + 2 + 1 我很赞同!
wushaominkk + 3 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

fls 发表于 2020-7-4 15:44
chengshengfa 发表于 2019-2-27 15:05
想问一下,在nginx中,怎么配置多个网页。比如10.10指定1这个证书,10.20指定2这个证书

不同的server_name 对应着不同的证书文件,配置多个server即可
kof21411 发表于 2019-2-27 12:07
dnzh2018 发表于 2019-2-27 12:43
差一个 systemctl的启动服务文件,加上就更好了的
chengshengfa 发表于 2019-2-27 15:05
想问一下,在nginx中,怎么配置多个网页。比如10.10指定1这个证书,10.20指定2这个证书
ysjhlnu 发表于 2019-5-21 13:47
学学楼主,学习了
maiawpyg 发表于 2019-5-21 14:39
在nginx中,怎么配置多个网页。比如10.10指定1这个证书,10.20指定2这个证书
swadia 发表于 2019-5-21 16:17
学习了,感谢
magicsunny 发表于 2020-7-4 14:37
感谢分享 昨天晚上刚弄好,申请ssl证书失败了好多次
sls198311 发表于 2020-7-4 16:44
收藏一波  感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 06:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表