Nginx反向代理apache on centos 7,配置http和https

时间:2017-03-06 08:36:12

标签: apache ssl nginx reverse-proxy lets-encrypt

我使用Centos 7在端口80上将nginx配置为端口8080上Apache服务器的代理服务器。

我成功配置了http,但是在安装后让我们加密Apache的证书,我看到Apache正在直接接收https的流量。我试图让nginx接收所有HTTP和HTTPS的流量,但面临问题,

我做了很多更改,例如禁用apache来侦听端口443,并且只收听8080。 我配置nginx来监听80和443,另外我删除了apache的证书并添加到nginx配置文件。目前。

nginx配置如下:

server {
     listen       80;
     listen       [::]:80 default_server;
    #server_name  _;
     server_name www.example.com;

     root         /usr/share/nginx/html;

     # Load configuration files for the default server block.
     include /etc/nginx/default.d/*.conf;

    location / {

         proxy_pass http://my.server.ip.add:8080;
         root   /usr/share/nginx/html;
         proxy_redirect off;
         proxy_set_header X-Forwarded-Host $host;
         proxy_set_header X-Forwarded-Server $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
    }
    error_page 404 /404.html;
         location = /40x.html {
    }
    error_page 500 502 503 504 /50x.html;
         location = /50x.html {
    }
}

server {
     listen 443 default_server;
     server_name www.example.com;

     root   /usr/share/nginx/html;

     ssl                  on;
     ssl_certificate      /etc/letsencrypt/live/www.example.com/cert.pem;
     ssl_certificate_key  /etc/letsencrypt/live/www.example.com/privkey.pem;

     ssl_prefer_server_ciphers on;
     ssl_session_timeout 1d;
     ssl_session_cache shared:SSL:50m;
     ssl_session_tickets off;

     # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
     #ssl_dhparam /etc/pki/nginx/dh2048.pem;

     # intermediate configuration. tweak to your needs.
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_ciphers 'ECDHE-RSA--REMOVED-SOME-HERE-SHA';

     location / {
         proxy_pass http://127.0.0.1:8080;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto https;
     } 
}

注意:我使用的是php 7.0

当前网站正在处理https和http,其中包含1个已知问题,即用户图片未加载。但我不确定它是由apache还是nginx提供的,在RESPONSE中我可以看到“nginx / 1.10.2”

  

我实际上要实现的是:我试图同时运行它们   node.js和apache使用nginx。我还没有开始节点。

我的问题:

  1. 在前端使用nginx和在后端使用apache真的很有用吗? (我读它保护免受dDos攻击)。
  2. 我们应该把证书放在nginx或apache上?
  3. 如何在nginx配置中添加node.js?我已经安装了节点js。
  4. 使用nginx和apache的最佳配置是什么?

1 个答案:

答案 0 :(得分:1)

晚上好, 首先,您在基础架构级别所做的所有考虑都是非常好的,在我看来,代理配置尽管在此时实施困难是最好的。

我已经使用它一段时间了,好处是巨大的。但是,我想问你正在使用什么类型的云基础设施,因为有很多东西会根据技术基础设施而发生变化。例如,我只使用与CloudFlare或其他AWS完全不同的Google Cloud Platform。

从结构的角度来看,所做的配置过于清晰且不清楚。您应该尝试这种方式:首先,使用上游域名指令输入http上下文,并使用Apache输入服务器IP地址,然后通过包含proxy_params文件和snippet ssl的参数来声明服务器和位置上下文。

如果您希望并帮助我了解我们采用的基础架构,我们可以看到如何一起进行配置,但因为每个基础架构都响应不同的配置,所以它迫在眉睫。

它也适用于php7.0。例如,使用php7.0配置PrestaShop 1.7.1.1我不得不对CMS的php.ini代码进行大量更改,因为我没有在FPM中使用CGI,但正如我所说的那样非常多变。

请参阅https://www.webfoobar.com/node/35