Fix various Sphinx warnings, errors
diff --git a/acme/acme/challenges.py b/acme/acme/challenges.py
index cfd6f8533c6..a2235b61ee5 100644
--- a/acme/acme/challenges.py
+++ b/acme/acme/challenges.py
@@ -116,7 +116,7 @@ def uri(self, domain, chall):
     def gen_resource(self, chall):
         """Generate provisioned resource.
 
-        :param .SimpleHTTP chall:
+        :param challenges.SimpleHTTP chall:
         :rtype: SimpleHTTPProvisionedResource
 
         """
@@ -125,7 +125,7 @@ def gen_resource(self, chall):
     def gen_validation(self, chall, account_key, alg=jose.RS256, **kwargs):
         """Generate validation.
 
-        :param .SimpleHTTP chall:
+        :param challenges.SimpleHTTP chall:
         :param .JWK account_key: Private account key.
         :param .JWA alg:
 
@@ -142,14 +142,14 @@ def check_validation(self, validation, chall, account_public_key):
         """Check validation.
 
         :param .JWS validation:
-        :param .SimpleHTTP chall:
+        :param challenges.SimpleHTTP chall:
         :type account_public_key:
             `~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`
             or
             `~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`
             or
             `~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`
-            wrapped in `.ComparableKey
+            wrapped in `.ComparableKey`
 
         :rtype: bool
 
@@ -173,7 +173,7 @@ def simple_verify(self, chall, domain, account_public_key, port=None):
         ignore the certificate provided by the HTTPS server", so
         ``requests.get`` is called with ``verify=False``.
 
-        :param .SimpleHTTP chall: Corresponding challenge.
+        :param challenges.SimpleHTTP chall: Corresponding challenge.
         :param unicode domain: Domain name being verified.
         :param account_public_key: Public key for the key pair
             being authorized. If ``None`` key verification is not
@@ -184,7 +184,7 @@ def simple_verify(self, chall, domain, account_public_key, port=None):
             `~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`
             or
             `~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`
-            wrapped in `.ComparableKey
+            wrapped in `.ComparableKey`
         :param int port: Port used in the validation.
 
         :returns: ``True`` iff validation is successful, ``False``
@@ -306,7 +306,7 @@ def z_domain(self):
     def chall(self):
         """Get challenge encoded in the `validation` payload.
 
-        :rtype: DVSNI
+        :rtype: challenges.DVSNI
 
         """
         # pylint: disable=no-member
@@ -370,7 +370,7 @@ def simple_verify(self, chall, domain, account_public_key,
             `~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`
             or
             `~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`
-            wrapped in `.ComparableKey
+            wrapped in `.ComparableKey`
         :param OpenSSL.crypto.X509 cert: Optional certificate. If not
             provided (``None``) certificate will be retrieved using
             `probe_cert`.
diff --git a/acme/acme/messages.py b/acme/acme/messages.py
index 33157899ef2..0855ae00811 100644
--- a/acme/acme/messages.py
+++ b/acme/acme/messages.py
@@ -231,7 +231,7 @@ class ChallengeBody(ResourceBody):
         call ``challb.x`` to get ``challb.chall.x`` contents.
     :ivar acme.messages.Status status:
     :ivar datetime.datetime validated:
-    :ivar Error error:
+    :ivar messages.Error error:
 
     """
     __slots__ = ('chall',)
diff --git a/docs/contributing.rst b/docs/contributing.rst
index 5aa6e3e76ff..a663c942afa 100644
--- a/docs/contributing.rst
+++ b/docs/contributing.rst
@@ -82,7 +82,7 @@ If you would like to test `letsencrypt_nginx` plugin (highly
 encouraged) make sure to install prerequisites as listed in
 ``tests/integration/nginx.sh``:
 
-.. include:: ../tests/integration/nginx.sh
+.. include:: ../letsencrypt-nginx/tests/boulder-integration.sh
    :start-line: 1
    :end-line: 2
    :code: shell
diff --git a/letsencrypt-apache/letsencrypt_apache/configurator.py b/letsencrypt-apache/letsencrypt_apache/configurator.py
index 01c9d4f3045..8403b974c5b 100644
--- a/letsencrypt-apache/letsencrypt_apache/configurator.py
+++ b/letsencrypt-apache/letsencrypt_apache/configurator.py
@@ -953,9 +953,10 @@ def enable_site(self, vhost):
         """Enables an available site, Apache restart required.
 
         .. note:: Does not make sure that the site correctly works or that all
-        modules are enabled appropriately.
+                  modules are enabled appropriately.
 
         .. todo:: This function should number subdomains before the domain vhost
+
         .. todo:: Make sure link is not broken...
 
         :param vhost: vhost to enable
@@ -1034,8 +1035,9 @@ def restart(self):
 
         .. todo:: This function will be converted to using reload
 
-        :raises .errors.MisconfigurationError: If unable to restart due to a
-        configuration problem, or if the restart subprocess cannot be run.
+        :raises .errors.MisconfigurationError: If unable to restart due
+            to a configuration problem, or if the restart subprocess
+            cannot be run.
 
         """
         return apache_restart(self.conf("init-script"))
diff --git a/letsencrypt-apache/letsencrypt_apache/obj.py b/letsencrypt-apache/letsencrypt_apache/obj.py
index c0dcc6c438e..8cd2378a41a 100644
--- a/letsencrypt-apache/letsencrypt_apache/obj.py
+++ b/letsencrypt-apache/letsencrypt_apache/obj.py
@@ -41,21 +41,24 @@ def _rank_specific_addr(self):
             return 2
 
     def conflicts(self, addr):
-        """Returns if address could conflict with correct function of self.
+        r"""Returns if address could conflict with correct function of self.
 
         Could addr take away service provided by self within Apache?
 
         .. note::IP Address is more important than wildcard.
             Connection from 127.0.0.1:80 with choices of *:80 and 127.0.0.1:*
-            chooses 127.0.0.1:*
+            chooses 127.0.0.1:\*
 
         .. todo:: Handle domain name addrs...
 
         Examples:
-        127.0.0.1:*.conflicts(127.0.0.1:443) - True
-        127.0.0.1:443.conflicts(127.0.0.1:*) - False
-        *:443.conflicts(*:80) - False
-        _default_:443.conflicts(*:443) - True
+
+        =========================================  =====
+        ``127.0.0.1:\*.conflicts(127.0.0.1:443)``  True
+        ``127.0.0.1:443.conflicts(127.0.0.1:\*)``  False
+        ``\*:443.conflicts(\*:80)``                False
+        ``_default_:443.conflicts(\*:443)``        True
+        =========================================  =====
 
         """
         if self._addr_less_specific(addr):
@@ -72,9 +75,10 @@ def is_wildcard(self):
     def get_sni_addr(self, port):
         """Returns the least specific address that resolves on the port.
 
-        Example:
-        1.2.3.4:443 -> 1.2.3.4:<port>
-        1.2.3.4:* -> 1.2.3.4:*
+        Examples:
+
+        - ``1.2.3.4:443`` -> ``1.2.3.4:<port>``
+        - ``1.2.3.4:*`` -> ``1.2.3.4:*``
 
         :param str port: Desired port
 
@@ -100,8 +104,9 @@ class VirtualHost(object):  # pylint: disable=too-few-public-methods
     :ivar bool enabled: Virtual host is enabled
 
     https://httpd.apache.org/docs/2.4/vhosts/details.html
+
     .. todo:: Any vhost that includes the magic _default_ wildcard is given the
-        same ServerName as the main server.
+              same ServerName as the main server.
 
     """
     # ?: is used for not returning enclosed characters
diff --git a/letsencrypt/crypto_util.py b/letsencrypt/crypto_util.py
index b7d9987fca4..279330f0c54 100644
--- a/letsencrypt/crypto_util.py
+++ b/letsencrypt/crypto_util.py
@@ -267,5 +267,5 @@ def asn1_generalizedtime_to_dt(timestamp):
 
 
 def pyopenssl_x509_name_as_text(x509name):
-    """Convert `OpenSSL.crypto.X509Name to text."""
+    """Convert `OpenSSL.crypto.X509Name` to text."""
     return "/".join("{0}={1}" for key, value in x509name.get_components())
