• 服务器 apache配置https,http强制跳转https(搭建http与https共存)


    公司linux服务器上的nginx的已经改成https了,现在还剩下一个windows云服务器没配置。

    环境 windows wampserver2.5 64位

    1.腾讯云申请的ssl

    包含三个文件:

    3_www.pdwbwx.com.key
    2_www.pdwbwx.com.crt
    1_root_bundle.crt

    2.将这三个文件放在apache安装目录下的config/extra/key文件夹中, key文件夹和httpd-ssl.conf 同级,key文件夹要自己创建。

    3.修改httpd.conf

    LoadModule socache_dbm_module modules/mod_socache_dbm.so

    LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

    LoadModule ssl_module modules/mod_ssl.so

    Include conf/extra/httpd-ssl.conf

    将上面四句的注释去掉。

    4.修改extra文件夹下面的 httpd-ssl.conf(这个很重要,修改不对的话,apache启动不了)

    #
    # This is the Apache server configuration file providing SSL support.
    # It contains the configuration directives to instruct the server how to
    # serve pages over an https connection. For detailed information about these
    # directives see <URL:http://httpd.apache.org/docs/2.4/mod/mod_ssl.html>
    #
    # Do NOT simply read the instructions in here without understanding
    # what they do. They're here only as hints or reminders. If you are unsure
    # consult the online docs. You have been warned.
    #
    # Required modules: mod_log_config, mod_setenvif, mod_ssl,
    # socache_shmcb_module (for default value of SSLSessionCache)

    #
    # Pseudo Random Number Generator (PRNG):
    # Configure one or more sources to seed the PRNG of the SSL library.
    # The seed data should be of good random quality.
    # WARNING! On some platforms /dev/random blocks if not enough entropy
    # is available. This means you then cannot use the /dev/random device
    # because it would lead to very long connection times (as long as
    # it requires to make more entropy available). But usually those
    # platforms additionally provide a /dev/urandom device which doesn't
    # block. So, if available, use this one instead. Read the mod_ssl User
    # Manual for more details.
    #
    #SSLRandomSeed startup file:/dev/random 512
    #SSLRandomSeed startup file:/dev/urandom 512
    #SSLRandomSeed connect file:/dev/random 512
    #SSLRandomSeed connect file:/dev/urandom 512


    #
    # When we also provide SSL we have to listen to the
    # standard HTTP port (see above) and to the HTTPS port
    #
    Listen 443

    ##
    ## SSL Global Context
    ##
    ## All SSL configuration in this context applies both to
    ## the main server and all SSL-enabled virtual hosts.
    ##

    # SSL Cipher Suite:
    # List the ciphers that the client is permitted to negotiate.
    # See the mod_ssl documentation for a complete list.
    #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

    #--
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4
    SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4
    SSLHonorCipherOrder on
    SSLProtocol TLSv1 +TLSv1.1 +TLSv1.2
    SSLProxyProtocol all -SSLv3
    #---

    # Speed-optimized SSL Cipher configuration:
    # If speed is your main concern (on busy HTTPS servers e.g.),
    # you might want to force clients to specific, performance
    # optimized ciphers. In this case, prepend those ciphers
    # to the SSLCipherSuite list, and enable SSLHonorCipherOrder.
    # Caveat: by giving precedence to RC4-SHA and AES128-SHA
    # (as in the example below), most connections will no longer
    # have perfect forward secrecy - if the server's key is
    # compromised, captures of past or future traffic must be
    # considered compromised, too.
    #SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5
    #SSLHonorCipherOrder on

    # Pass Phrase Dialog:
    # Configure the pass phrase gathering process.
    # The filtering dialog program (`builtin' is an internal
    # terminal dialog) has to provide the pass phrase on stdout.
    SSLPassPhraseDialog builtin

    # Inter-Process Session Cache:
    # Configure the SSL Session Cache: First the mechanism
    # to use and second the expiring timeout (in seconds).
    #SSLSessionCache "dbm:c:/Apache24/logs/ssl_scache"
    #-这个不好用就换上面的-
    SSLSessionCache "shmcb:c:/Apache24/logs/ssl_scache(512000)"
    #--
    SSLSessionCacheTimeout 300

    ##
    ## SSL Virtual Host Context
    ##
    <VirtualHost _default_:443>

    # General setup for the virtual host
    #--
    DocumentRoot "E:wampwwwdomain"
    ServerName www.domain.com:443
    ServerAdmin admin@www.domain.com
    ErrorLog "E:wampinapacheapache2.4.9logserror.log"
    TransferLog "E:wampinapacheapache2.4.9logsaccess.log"
    #--
    # SSL Engine Switch:
    # Enable/Disable SSL for this virtual host.
    SSLEngine on

    # Server Certificate:
    # Point SSLCertificateFile at a PEM encoded certificate. If
    # the certificate is encrypted, then you will be prompted for a
    # pass phrase. Note that a kill -HUP will prompt again. Keep
    # in mind that if you have both an RSA and a DSA certificate you
    # can configure both in parallel (to also allow the use of DSA
    # ciphers, etc.)
    # Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
    # require an ECC certificate which can also be configured in
    # parallel.
    #--
    SSLCertificateFile "E:wampinapacheapache2.4.9confextrakey2_www.domain.com.crt"
    #--
    #SSLCertificateFile "c:/Apache24/conf/server-dsa.crt"
    #SSLCertificateFile "c:/Apache24/conf/server-ecc.crt"

    # Server Private Key:
    # If the key is not combined with the certificate, use this
    # directive to point at the key file. Keep in mind that if
    # you've both a RSA and a DSA private key you can configure
    # both in parallel (to also allow the use of DSA ciphers, etc.)
    # ECC keys, when in use, can also be configured in parallel
    #--
    SSLCertificateKeyFile "E:wampinapacheapache2.4.9confextrakey3_www.domain.com.key"
    #--
    #SSLCertificateKeyFile "c:/Apache24/conf/server-dsa.key"
    #SSLCertificateKeyFile "c:/Apache24/conf/server-ecc.key"

    # Server Certificate Chain:
    # Point SSLCertificateChainFile at a file containing the
    # concatenation of PEM encoded CA certificates which form the
    # certificate chain for the server certificate. Alternatively
    # the referenced file can be the same as SSLCertificateFile
    # when the CA certificates are directly appended to the server
    # certificate for convenience.
    #--
    SSLCertificateChainFile "E:wampinapacheapache2.4.9confextrakey1_root_bundle.crt"
    #--
    # Certificate Authority (CA):
    # Set the CA certificate verification path where to find CA
    # certificates for client authentication or alternatively one
    # huge file containing all of them (file must be PEM encoded)
    # Note: Inside SSLCACertificatePath you need hash symlinks
    # to point to the certificate files. Use the provided
    # Makefile to update the hash symlinks after changes.
    #SSLCACertificatePath "c:/Apache24/conf/ssl.crt"
    #SSLCACertificateFile "c:/Apache24/conf/ssl.crt/ca-bundle.crt"

    # Certificate Revocation Lists (CRL):
    # Set the CA revocation path where to find CA CRLs for client
    # authentication or alternatively one huge file containing all
    # of them (file must be PEM encoded).
    # The CRL checking mode needs to be configured explicitly
    # through SSLCARevocationCheck (defaults to "none" otherwise).
    # Note: Inside SSLCARevocationPath you need hash symlinks
    # to point to the certificate files. Use the provided
    # Makefile to update the hash symlinks after changes.
    #SSLCARevocationPath "c:/Apache24/conf/ssl.crl"
    #SSLCARevocationFile "c:/Apache24/conf/ssl.crl/ca-bundle.crl"
    #SSLCARevocationCheck chain

    # Client Authentication (Type):
    # Client certificate verification type and depth. Types are
    # none, optional, require and optional_no_ca. Depth is a
    # number which specifies how deeply to verify the certificate
    # issuer chain before deciding the certificate is not valid.
    #SSLVerifyClient require
    #SSLVerifyDepth 10

    # TLS-SRP mutual authentication:
    # Enable TLS-SRP and set the path to the OpenSSL SRP verifier
    # file (containing login information for SRP user accounts).
    # Requires OpenSSL 1.0.1 or newer. See the mod_ssl FAQ for
    # detailed instructions on creating this file. Example:
    # "openssl srp -srpvfile c:/Apache24/conf/passwd.srpv -add username"
    #SSLSRPVerifierFile "c:/Apache24/conf/passwd.srpv"

    # Access Control:
    # With SSLRequire you can do per-directory access control based
    # on arbitrary complex boolean expressions containing server
    # variable checks and other lookup directives. The syntax is a
    # mixture between C and Perl. See the mod_ssl documentation
    # for more details.
    #<Location />
    #SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/
    # and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd."
    # and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
    # and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5
    # and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 )
    # or %{REMOTE_ADDR} =~ m/^192.76.162.[0-9]+$/
    #</Location>

    # SSL Engine Options:
    # Set various options for the SSL engine.
    # o FakeBasicAuth:
    # Translate the client X.509 into a Basic Authorisation. This means that
    # the standard Auth/DBMAuth methods can be used for access control. The
    # user name is the `one line' version of the client's X.509 certificate.
    # Note that no password is obtained from the user. Every entry in the user
    # file needs this password: `xxj31ZMTZzkVA'.
    # o ExportCertData:
    # This exports two additional environment variables: SSL_CLIENT_CERT and
    # SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
    # server (always existing) and the client (only existing when client
    # authentication is used). This can be used to import the certificates
    # into CGI scripts.
    # o StdEnvVars:
    # This exports the standard SSL/TLS related `SSL_*' environment variables.
    # Per default this exportation is switched off for performance reasons,
    # because the extraction step is an expensive operation and is usually
    # useless for serving static content. So one usually enables the
    # exportation for CGI and SSI requests only.
    # o StrictRequire:
    # This denies access when "SSLRequireSSL" or "SSLRequire" applied even
    # under a "Satisfy any" situation, i.e. when it applies access is denied
    # and no other module can change it.
    # o OptRenegotiate:
    # This enables optimized SSL connection renegotiation handling when SSL
    # directives are used in per-directory context.
    #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
    <FilesMatch ".(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
    </FilesMatch>
    #--
    <Directory "E:wampinapacheapache2.4.9cgi-bin">
    #--
    SSLOptions +StdEnvVars
    </Directory>

    # SSL Protocol Adjustments:
    # The safe and default but still SSL/TLS standard compliant shutdown
    # approach is that mod_ssl sends the close notify alert but doesn't wait for
    # the close notify alert from client. When you need a different shutdown
    # approach you can use one of the following variables:
    # o ssl-unclean-shutdown:
    # This forces an unclean shutdown when the connection is closed, i.e. no
    # SSL close notify alert is sent or allowed to be received. This violates
    # the SSL/TLS standard but is needed for some brain-dead browsers. Use
    # this when you receive I/O errors because of the standard approach where
    # mod_ssl sends the close notify alert.
    # o ssl-accurate-shutdown:
    # This forces an accurate shutdown when the connection is closed, i.e. a
    # SSL close notify alert is send and mod_ssl waits for the close notify
    # alert of the client. This is 100% SSL/TLS standard compliant, but in
    # practice often causes hanging connections with brain-dead browsers. Use
    # this only for browsers where you know that their SSL implementation
    # works correctly.
    # Notice: Most problems of broken clients are also related to the HTTP
    # keep-alive facility, so you usually additionally want to disable
    # keep-alive for those clients, too. Use variable "nokeepalive" for this.
    # Similarly, one has to force some clients to use HTTP/1.0 to workaround
    # their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
    # "force-response-1.0" for this.
    BrowserMatch "MSIE [2-5]"
    nokeepalive ssl-unclean-shutdown
    downgrade-1.0 force-response-1.0

    # Per-Server Logging:
    # The home of a custom SSL log file. Use this when you want a
    # compact non-error SSL logfile on a virtual host basis.
    #--
    CustomLog "E:wampinapacheapache2.4.9logsssl_request.log"
    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
    #--
    </VirtualHost>
     

    这个里面的注释太多了,一个一个对着修改就好啦,domain是自己的域名,还有日志文件的路径最好修改成对应自己apache安装目录下的logs文件夹,不然后面检查的时候会报错。

    修改好以后,可以先尝试重启wampserver,如果一直黄,这个时候就可以把第3步里的include 那个给注释掉,然后再重启,如果重启成功,说明还是第四步的httpd-ssl.conf的配置有问题,

    这个时候可以打开 cmd窗口,进入apache安装目录下的bin文件夹 然后输入命令 httpd -t  检查错误, 提示错误就根据错误修改, 如果是ok 那就代表没有语法错误,检查一下有没有漏掉的内容,确认无误后即可重启wampserver,

    我通过 httpd -t 检查结果是ok 以后 wampserver就可以正常运行了,这个时候 用https开头 就可以访问项目了,当然,访问项目可能绿色小锁还是带黄色感叹号,这个时候就要更改页面上的http链接,模板里面body体里面的所有http都换成https以后,网站就是绿色小锁了,多半都是图片的链接。

    2.apache 配置服务器http重定向到https

    修改apache 配置文件httpd.conf

    1.去掉LoadModule rewrite_module modules/mod_rewrite.so 前面的#号

    2.找到

    Directory "/var/www/html/app/src/htdocs_www">


    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important. Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    # Options FileInfo AuthConfig Limit
    #
    #
    AllowOverride All
    #
    # Controls who can get stuff from this server.
    #
    Order allow,deny
    Allow from all
    # 新增
    RewriteEngine on
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)?$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
    </Directory>
    按照这个来配置的,结果就是当前服务器下所有的项目都会强制跳转,如果你的服务器上只挂了一个项目,那就没问题,如果是多个,并且有http不想跳转https 就要利用.htaccess 文件

    3.Apache 配置 单个项目 http重定向到https

    1.还是和上面一样,在httpd.conf去掉下面这一句的#

    LoadModule rewrite_module modules/mod_rewrite.so
     

    2.新建.htaccess文件(windows系统就是新建 .htaccess. 文件,后面加个 . 就可以创建了)

    然后输入如下规则

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.domain.com [NC]
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

    上面的作用就是 开启url重写,当 域名是www.domain.com ,并且端口不是 443 就进行永久重定向到https://www.domain.com/............(参数省略)

    这个domain根据自己的网址修改。

    修改好以后把 .htaccess 文件 放到你的项目的根目录下(比如我是www/myproject, 我就放到myproject文件夹里),重启apache 即可实现重定向。

    有帮助的话,点个赞,谢谢

    vim /usr/local/apache/conf/httpd.conf


    3-1 .Apache 配置 单个项目 http重定向到https (补充,真正的实现单个项目 http重定向https ,如下图,亲测)

    在 .htaccess中

    <IfModule mod_rewrite.c>
    Options +FollowSymlinks -Multiviews
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^xx.xxxx.com [NC]
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

    RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
    </IfModule>

    4: 种方案

    <IfModule mod_rewrite.c>
    Options +FollowSymlinks -Multiviews
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]

    RewriteCond %{HTTP_HOST} ^www.xxxx.club [NC]
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
    </IfModule>

    --------------------------搭建http与https共存(完整效果图)--------------------------------

    a : 去/usr/local/apache/conf/extra 下找到 httpd-ssl.conf 注销 里面原来的 <VirtualHost _default_:443> </VirtualHost >

     

    b: 在httpd-ssl.conf 底部新增如下 VirttalHost 

    294 <VirtualHost 0.0.0.0:443>
    295 DocumentRoot "/var/www/xxxx/public"
    296 ServerName ah.xxxx.club
    297 SSLEngine on
    298 SSLCertificateFile /usr/local/apache/conf/ah/xxxx.club.crt
    299 SSLCertificateKeyFile /usr/local/apache/conf/ah/3xxxxx.club.key
    300 SSLCertificateChainFile /usr/local/apache/conf/ah/1xxxxxbundle.crt
    301 </VirtualHost>

    c:编辑 /usr/local/apache/conf 下的  httpd.conf ,

    <VirtualHost *:80>
    ServerName ah.xxxx.club
    DocumentRoot "/var/www/xxxx/public"
    </VirtualHost>

    <VirtualHost *:80>
    ServerName blog.xxxx.club
    DocumentRoot "/var/www/xxxx/public"
    </VirtualHost>

    d: 编辑 单个项目 thinkphp5下的 .htaccess   如下图

    <IfModule mod_rewrite.c>
    Options +FollowSymlinks -Multiviews
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]

    RewriteCond %{HTTP_HOST} ^ah.xxxx.club [NC]
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
    </IfModule>

    综合 a,b,c,d 四点 真正的实现单个项目 http重定向https  (效果图)

     

  • 相关阅读:
    P2711 小行星 最小割
    bzoj2141: 排队 cdq分治
    bzoj 4237: 稻草人 cdq分治
    P1527 [国家集训队]矩阵乘法 整体二分
    P2617 Dynamic Rankings 整体二分
    P3834 【模板】可持久化线段树 1(主席树) 整体二分
    SPREAD for Windows Forms 代码片段
    PHP+Oracle Instant Client
    SQL利用CASE按分组显示合计
    SPREAD for Windows Forms 控制输入法
  • 原文地址:https://www.cnblogs.com/yehuisir/p/10280468.html
Copyright © 2020-2023  润新知